Winery-Strata / tools /test_conversation_cache_isolation.py
Zandy-Wandy's picture
🍷 Winery Strata: fork of Niko1221/Strata (Winery Cuvée family, wine-red UI)
bbb6388 verified
Raw History Blame Contribute Delete
4.12 kB
"""Offline checks for image/steering isolation evidence and generated fixtures."""
import copy
from pathlib import Path
import struct
import subprocess
import sys
import tempfile
import unittest
from tools.conversation_cache_isolation import STATE_KEYS, fixtures, verify
from tools.gguf_reader import GGUFFile
def evidence(scenario):
image = scenario == 'image'
names = (['image-A', 'text-B', 'image-A-return', 'image-B', 'image-A-again', 'grid-changed', 'image-A-final']
if image else ['off', 'on', 'text-B', 'off-return', 'on-return', 'off-again'])
hits = [2, 4, 6] if image else [3, 4, 5]
records = [{'name': name, 'ids': [123], 'finish': 'length', 'reused': 0,
'state': {k: str(i) for k in STATE_KEYS}} for i, name in enumerate(names)]
candidate = copy.deepcopy(records)
for i in hits:
candidate[i]['reused'] = 100
info = dict(expert_slots=8000, kv='int8', kv_resident=32768, context=262144,
spec=2, mtp_max=1, lookup=0, cvec=0 if image else 'add:1-47')
return {'baseline': records, 'candidate': candidate,
'engine_info': {'baseline': dict(info), 'candidate': dict(info)}}
class IsolationGate(unittest.TestCase):
def test_complete_evidence(self):
for scenario in ('image', 'add', 'project'):
verify(evidence(scenario), scenario)
def test_incomplete_or_wrong_evidence_rejected(self):
for scenario in ('image', 'add'):
cases = {
'incompatible reuse': lambda d: d['candidate'][1].update(reused=5),
'no parked hit': lambda d: d['candidate'][-1].update(reused=0),
'state mismatch': lambda d: d['candidate'][-1]['state'].update(gdn='ffff'),
'missing state': lambda d: d['candidate'][-1]['state'].clear(),
'empty output': lambda d: d['candidate'][-1]['ids'].clear(),
'missing request': lambda d: d['candidate'].pop(),
'different residency': lambda d: d['engine_info']['candidate'].update(expert_slots=1),
}
for name, mutate in cases.items():
with self.subTest(scenario=scenario, case=name):
data = evidence(scenario)
mutate(data)
with self.assertRaises(AssertionError):
verify(data, scenario)
def test_generated_fixtures(self):
with tempfile.TemporaryDirectory(prefix='strata-isolation-') as directory:
p = Path(directory)
fixtures(p, 2560)
cv = GGUFFile(p / 'control.gguf')
self.assertEqual(cv.metadata['general.architecture'], 'controlvector')
self.assertEqual([t.name for t in cv.tensors], ['direction.1', 'direction.20'])
self.assertTrue(all(t.elements == 2560 for t in cv.tensors))
a, b, grid = [(p / (name + '.sve')).read_bytes() for name in ('image-a', 'image-b', 'image-grid')]
self.assertEqual(struct.unpack('<5i', a[:20]), (0x31455653, 4, 2, 2, 2560))
self.assertEqual(len(a), 20 + 4 * 2560 * 4)
self.assertEqual(a[:20], b[:20])
self.assertNotEqual(a[20:], b[20:])
self.assertNotEqual(a[:20], grid[:20])
self.assertEqual(a[20:], grid[20:])
def test_dry_run_does_not_read_missing_config(self):
with tempfile.TemporaryDirectory(prefix='strata-isolation-dry-') as directory:
p = Path(directory)
result = subprocess.run([sys.executable, str(Path(__file__).with_name('conversation_cache_isolation.py')),
'--config', str(p / 'missing.json'), '--engine', str(p / 'missing'),
'--output', str(p / 'not-created'), '--scenario', 'image'],
capture_output=True, text=True, timeout=10)
self.assertEqual(result.returncode, 0, result.stderr)
self.assertIn('no model loaded', result.stdout)
self.assertFalse((p / 'not-created').exists())
if __name__ == '__main__':
unittest.main()