Download source/tests/test_fleet_campaign.py from andyshu/opensysone: direct link, hf CLI and curl.
- Browser
- Download file 20.3 kB
-
https://huggingface.co/andyshu/opensysone/resolve/f2d6f8daa15bd21c316e61249f45ac16cbb79d45/source/tests/test_fleet_campaign.py
- Command line
-
hf download hf://andyshu/opensysone@f2d6f8daa15bd21c316e61249f45ac16cbb79d45/source/tests/test_fleet_campaign.py
-
curl -L -o test_fleet_campaign.py https://huggingface.co/andyshu/opensysone/resolve/f2d6f8daa15bd21c316e61249f45ac16cbb79d45/source/tests/test_fleet_campaign.py
20.3 kB
| import copy | |
| from datetime import datetime, timezone | |
| import hashlib | |
| import json | |
| import io | |
| import math | |
| from pathlib import Path | |
| import tempfile | |
| import time | |
| import unittest | |
| from unittest.mock import patch, MagicMock | |
| from selection import SELECTION_METRIC, validation_selection | |
| from scripts.fleet_campaign import (choose_candidate, checksum, copy_evidence, identity, | |
| snapshot_candidate, validate_plan, validation_score, | |
| verify_candidate, verify_correctness, verify_compatibility, | |
| verify_candidate_dataset, verify_selected_dataset, PROTECTED_SPLITS, | |
| deploy, stop_candidate, ROOT) | |
| def predictions(logit=1.0): | |
| normalizer = math.log1p(math.exp(-logit)) | |
| logs = [-normalizer, -logit-normalizer] | |
| return [{'id':f'{family}-{index}','group':f'{family}-{index}','family':family, | |
| 'choices':['yes','no'],'target':0,'logits':[logit,0.0], | |
| 'log_probabilities':logs[:],'probabilities':[math.exp(v) for v in logs]} | |
| for family in ('arc','banking','boolq','snli') for index in range(128)] | |
| def artifact(rows, model): | |
| from training_model import ADAPTER_VERSION, PROMPT_VERSION | |
| dataset = Path(model).parent/'dataset' | |
| dataset.mkdir(exist_ok=True) | |
| (dataset/'validation.jsonl').write_text('frozen opaque bytes') | |
| hashes = {'validation':checksum(dataset/'validation.jsonl')} | |
| (dataset/'manifest.json').write_text(json.dumps({'split_sha256':hashes})) | |
| signature = hashlib.sha256(json.dumps({'data':hashes,'model':{'revision':'pinned'}, | |
| 'implementation':checksum(ROOT/'training_model.py'),'max_tokens':512},sort_keys=True).encode()).hexdigest() | |
| return {'format':'opensysone-adapter-v1','step':40,'trainable_state':{'head':'fake CPU test tensor'}, | |
| 'best_validation_macro_nll':validation_score(rows,rows)['macro_nll'], | |
| 'selection_metric':SELECTION_METRIC,'best_validation_selection_score':validation_selection(rows)['score'], | |
| 'source_commit':'abc123','model_provenance':{'revision':'pinned'},'data_signature':signature, | |
| 'adapter_version':ADAPTER_VERSION,'prompt_version':PROMPT_VERSION, | |
| 'config':{'validation_per_family':128,'model':str(model),'dataset':str(dataset),'max_tokens':512}} | |
| def correctness(directory): | |
| checks = {key:0.0 for key in ('branch_chunks_1_probability_max_abs','branch_chunks_2_probability_max_abs', | |
| 'branch_chunks_4_probability_max_abs','question_isolation_probability_max_abs', | |
| 'candidate_permutation_probability_max_abs','repeat_probability_max_abs')} | |
| checks['tolerance_probability_abs'] = 1e-4 | |
| (directory/'correctness_initial.json').write_text(json.dumps(checks)) | |
| return checks | |
| def dataset_variant(directory, train='original training'): | |
| directory.mkdir() | |
| hashes = {} | |
| for split in ('train', *PROTECTED_SPLITS): | |
| path = directory/f'{split}.jsonl' | |
| path.write_text(train if split == 'train' else 'opaque frozen ' + split) | |
| hashes[split] = checksum(path) | |
| (directory/'manifest.json').write_text(json.dumps({'split_sha256':hashes})) | |
| return directory | |
| class FleetCampaignTests(unittest.TestCase): | |
| def test_dataset_override_requires_explicit_matching_registration_and_protected_bytes(self): | |
| with tempfile.TemporaryDirectory() as directory: | |
| root = Path(directory) | |
| baseline = dataset_variant(root/'v1') | |
| expanded = dataset_variant(root/'v2', 'original plus additional training') | |
| candidate = {'name':'expanded','host':'local','dataset':str(expanded), | |
| 'project':'/project','python':'/python','campaign':'/campaign','training':'/training'} | |
| plan = {'dataset':str(baseline),'candidates':[candidate], 'reference_predictions':'/reference.json', | |
| 'selection_cutoff':'2026-09-17T16:00:00Z','final_deadline':'2026-09-17T18:16:10Z'} | |
| proof = verify_candidate_dataset(candidate, plan, expanded) | |
| self.assertEqual(set(proof['protected_split_sha256']),set(PROTECTED_SPLITS)) | |
| self.assertNotEqual(checksum(baseline/'train.jsonl'),checksum(expanded/'train.jsonl')) | |
| self.assertLess(*validate_plan(plan, datetime(2026,9,17,6,tzinfo=timezone.utc).timestamp())) | |
| selected = {'name':'expanded','config':{'dataset':str(expanded)}} | |
| self.assertEqual(verify_selected_dataset(selected,plan),proof) | |
| without_override = {key:value for key,value in candidate.items() if key != 'dataset'} | |
| self.assertIsNone(verify_candidate_dataset(without_override,plan,baseline)) | |
| for entry,actual in ((without_override,expanded),(candidate,baseline), | |
| ({**candidate,'dataset':'relative'},expanded)): | |
| with self.assertRaises(ValueError): | |
| verify_candidate_dataset(entry,plan,actual) | |
| with self.assertRaisesRegex(ValueError,'not uniquely registered'): | |
| verify_selected_dataset({**selected,'name':'unregistered'},plan) | |
| def test_dataset_override_rejects_each_changed_missing_or_unhashed_protected_split(self): | |
| for split in PROTECTED_SPLITS: | |
| for damage in ('changed','missing_checksum','missing_file','stale_checksum'): | |
| with self.subTest(split=split,damage=damage), tempfile.TemporaryDirectory() as directory: | |
| root = Path(directory) | |
| baseline = dataset_variant(root/'v1') | |
| expanded = dataset_variant(root/'v2','expanded training') | |
| manifest = json.loads((expanded/'manifest.json').read_text()) | |
| if damage in ('changed','stale_checksum'): | |
| (expanded/f'{split}.jsonl').write_text('different reserved bytes') | |
| if damage == 'changed': | |
| manifest['split_sha256'][split] = checksum(expanded/f'{split}.jsonl') | |
| elif damage == 'missing_checksum': | |
| del manifest['split_sha256'][split] | |
| else: | |
| (expanded/f'{split}.jsonl').unlink() | |
| (expanded/'manifest.json').write_text(json.dumps(manifest)) | |
| with self.assertRaisesRegex(ValueError,'[Pp]rotected split'): | |
| verify_candidate_dataset({'dataset':str(expanded)}, {'dataset':str(baseline)}, expanded) | |
| def test_fresh_finalization_uses_verified_selected_dataset_variant(self): | |
| with tempfile.TemporaryDirectory() as directory: | |
| root = Path(directory) | |
| baseline = dataset_variant(root/'v1') | |
| expanded = dataset_variant(root/'v2','expanded training') | |
| campaign = root/'campaign' | |
| campaign.mkdir() | |
| selected = {'name':'expanded','checkpoint':'/verified/best.pt','config':{'dataset':str(expanded)}} | |
| plan = {'dataset':str(baseline),'candidates':[{'name':'expanded','dataset':str(expanded)}]} | |
| verify_selected_dataset(selected,plan) | |
| deadline = time.time()+7200 | |
| with patch('scripts.fleet_campaign.stage',side_effect=RuntimeError('CPU fixture stops before execution')) as stage: | |
| with self.assertRaisesRegex(RuntimeError,'CPU fixture'): | |
| deploy(campaign,{},plan,selected,deadline) | |
| self.assertEqual(stage.call_args.args[2],'evaluation') | |
| command = stage.call_args.args[3] | |
| self.assertEqual(command[command.index('--dataset')+1],str(expanded)) | |
| self.assertEqual(stage.call_args.args[4],deadline-120) | |
| def test_natural_exit_between_inspection_and_stop_requires_fresh_stopped_status(self): | |
| running = {'supervisor_running':True,'child_running':True,'api_running':False} | |
| stopped = {'supervisor_running':False,'child_running':False,'api_running':False} | |
| for followup in (stopped,running): | |
| with self.subTest(followup=followup), patch('scripts.fleet_campaign.candidate_status', | |
| side_effect=[running,RuntimeError('No recorded process remains'),followup]) as status: | |
| if followup is stopped: | |
| self.assertEqual(stop_candidate({'name':'gx10'}),stopped) | |
| else: | |
| with self.assertRaisesRegex(RuntimeError,'No recorded process'): | |
| stop_candidate({'name':'gx10'}) | |
| self.assertEqual(status.call_count,3) | |
| self.assertEqual(status.call_args_list[1].kwargs,{'stop':True}) | |
| self.assertEqual(status.call_args_list[2].kwargs,{}) | |
| def test_validation_identity_probabilities_and_durable_score_are_required(self): | |
| rows = predictions() | |
| with tempfile.TemporaryDirectory() as directory: | |
| saved = artifact(rows,Path(directory)/'model') | |
| self.assertAlmostEqual(verify_candidate(saved,rows,rows)['macro_nll'],math.log1p(math.exp(-1))) | |
| self.assertEqual(verify_candidate(saved,list(reversed(rows)),rows)['accuracy'],1) | |
| changed = copy.deepcopy(rows) | |
| changed[0]['id'] = 'different-id' | |
| with self.assertRaisesRegex(ValueError,'identical 512'): | |
| verify_candidate(saved,changed,rows) | |
| changed = copy.deepcopy(rows) | |
| changed[0]['group'] = 'different-source-group' | |
| with self.assertRaises(ValueError): | |
| verify_candidate(saved,changed,rows) | |
| changed = copy.deepcopy(rows) | |
| changed[0]['probabilities'] = [0.5,0.5] | |
| with self.assertRaisesRegex(ValueError,'disagree with logits'): | |
| verify_candidate(saved,changed,rows) | |
| changed = copy.deepcopy(rows) | |
| changed[0]['logits'][0] = float('nan') | |
| with self.assertRaisesRegex(ValueError,'Non-finite'): | |
| verify_candidate(saved,changed,rows) | |
| with self.assertRaisesRegex(ValueError,'durable best'): | |
| verify_candidate({**saved,'best_validation_macro_nll':0.01},rows,rows) | |
| with self.assertRaisesRegex(ValueError,'durable trained artifact'): | |
| verify_candidate({**saved,'trainable_state':{}},rows,rows) | |
| with self.assertRaisesRegex(ValueError,'raw validation'): | |
| verify_candidate({**saved,'temperature':2},rows,rows) | |
| with self.assertRaisesRegex(ValueError,'selection policy'): | |
| verify_candidate({**saved,'selection_metric':'raw_nll'},rows,rows) | |
| with self.assertRaisesRegex(ValueError,'Crossfit selection score'): | |
| verify_candidate({**saved,'best_validation_selection_score':0.2},rows,rows) | |
| with self.assertRaises(ValueError): | |
| verify_candidate(saved,rows[:-1],rows) | |
| duplicate = copy.deepcopy(rows) | |
| duplicate[-1] = duplicate[0] | |
| with self.assertRaisesRegex(ValueError,'Duplicate'): | |
| identity(duplicate) | |
| def test_selection_ignores_incomplete_better_scores(self): | |
| candidates = [{'name':'incomplete','eligible':False,'metrics':{'selection_score':0.01}}, | |
| {'name':'gx10','eligible':True,'metrics':{'macro_nll':0.3,'selection_score':0.4}}, | |
| {'name':'spark','eligible':True,'metrics':{'macro_nll':0.5,'selection_score':0.3}}] | |
| self.assertEqual(choose_candidate(candidates)['name'],'spark') | |
| self.assertEqual(choose_candidate(candidates[:2])['name'],'gx10') | |
| with self.assertRaisesRegex(RuntimeError,'No verified durable'): | |
| choose_candidate(candidates[:1]) | |
| def test_deadlines_timezone_paths_and_fallback(self): | |
| now = datetime(2026,9,16,20,tzinfo=timezone.utc).timestamp() | |
| plan = {'selection_cutoff':'2026-09-17T16:00:00Z','final_deadline':'2026-09-17T18:16:10Z', | |
| 'dataset':'/frozen/data','reference_predictions':'/reference.json', | |
| 'candidates':[{'name':'gx10','host':'local','project':'/project','python':'/python', | |
| 'campaign':'/campaign','training':'/campaign/training'}]} | |
| self.assertLess(*validate_plan(plan,now)) | |
| for change in ({'final_deadline':'2026-09-17T17:00:00Z'}, | |
| {'final_deadline':'2026-09-17T18:16:10'}, | |
| {'final_deadline':'2026-09-18T18:16:10Z'}, | |
| {'reference_predictions':'relative'}, | |
| {'candidates':[{**plan['candidates'][0],'host':'192.168.8.111'}]}): | |
| with self.assertRaises(ValueError): | |
| validate_plan({**plan,**change},now) | |
| def test_snapshot_loads_durable_best_and_never_copies_test_predictions(self): | |
| import torch | |
| with tempfile.TemporaryDirectory() as directory: | |
| root = Path(directory) | |
| training = root/'training' | |
| training.mkdir() | |
| model = root/'model' | |
| model.mkdir() | |
| rows = predictions() | |
| saved = artifact(rows,model) | |
| (model/'opensysone-provenance.json').write_text(json.dumps(saved['model_provenance'])) | |
| torch.save(saved,training/'best.pt') | |
| correctness(training) | |
| (training/'best_validation_predictions.json').write_text(json.dumps(rows)) | |
| (training/'test_predictions.json').write_text('MUST NOT COPY') | |
| (training/'calibration_predictions.json').write_text('MUST NOT COPY') | |
| (training/'holdout_predictions.json').write_text('MUST NOT COPY') | |
| (training/'checkpoint.pt').write_text('MUST NOT COPY OPTIMIZER') | |
| candidate = {'name':'gx10','host':'local','training':str(training),'campaign':'/campaign'} | |
| record = snapshot_candidate(candidate,root/'snapshot',rows) | |
| self.assertTrue(record['eligible']) | |
| self.assertEqual(record['checkpoint_sha256'],checksum(training/'best.pt')) | |
| copied = {p.name for p in (root/'snapshot/training').iterdir()} | |
| self.assertEqual(copied,{'best.pt','best_validation_predictions.json','correctness_initial.json'}) | |
| (training/'best_validation_predictions.json').unlink() | |
| with self.assertRaisesRegex(ValueError,'no matching complete validation'): | |
| snapshot_candidate(candidate,root/'missing-evidence',rows) | |
| def test_snapshot_accepts_inherited_pilot_evidence_and_rejects_transfer_change(self): | |
| import torch | |
| with tempfile.TemporaryDirectory() as directory: | |
| root = Path(directory) | |
| training,pilot,model = root/'training',root/'pilot',root/'model' | |
| for path in (training,pilot,model): | |
| path.mkdir() | |
| rows = predictions() | |
| torch.save(artifact(rows,model),training/'best.pt') | |
| (model/'opensysone-provenance.json').write_text(json.dumps({'revision':'pinned'})) | |
| correctness(training) | |
| (pilot/'validation_step_000040_predictions.json').write_text(json.dumps(rows)) | |
| candidate = {'name':'gx10','host':'local','training':str(training),'campaign':'/campaign', | |
| 'evidence_dirs':[str(pilot)]} | |
| record = snapshot_candidate(candidate,root/'snapshot',rows) | |
| self.assertTrue(record['eligible']) | |
| with patch('scripts.fleet_campaign.command_on',side_effect=['first-sha best.pt','changed-sha best.pt']): | |
| with self.assertRaisesRegex(ValueError,'changed during snapshot'): | |
| snapshot_candidate(candidate,root/'changed-snapshot',rows) | |
| def test_correctness_requires_complete_finite_gate_and_does_not_hide_final_failure(self): | |
| with tempfile.TemporaryDirectory() as directory: | |
| directory = Path(directory) | |
| with self.assertRaisesRegex(ValueError,'lacks'): | |
| verify_correctness(directory) | |
| checks = correctness(directory) | |
| self.assertEqual(verify_correctness(directory).name,'correctness_initial.json') | |
| checks['repeat_probability_max_abs'] = float('nan') | |
| (directory/'correctness_final.json').write_text(json.dumps(checks)) | |
| with self.assertRaisesRegex(ValueError,'failed'): | |
| verify_correctness(directory) | |
| checks['repeat_probability_max_abs'] = 0.0 | |
| checks['tolerance_probability_abs'] = 0.02 | |
| (directory/'correctness_final.json').write_text(json.dumps(checks)) | |
| with self.assertRaisesRegex(ValueError,'weakened'): | |
| verify_correctness(directory) | |
| def test_compatibility_checks_versions_and_actual_frozen_source_bytes(self): | |
| with tempfile.TemporaryDirectory() as directory: | |
| saved = artifact(predictions(),Path(directory)/'model') | |
| verify_compatibility(saved) | |
| for change in ({'prompt_version':'other'}, {'adapter_version':'other'}, {'data_signature':'other'}): | |
| with self.assertRaisesRegex(ValueError,'incompatible'): | |
| verify_compatibility({**saved,**change}) | |
| (Path(saved['config']['dataset'])/'validation.jsonl').write_text('modified') | |
| with self.assertRaisesRegex(ValueError,'source hash mismatch'): | |
| verify_compatibility(saved) | |
| def test_deployment_pointer_requires_completed_eval_and_actual_http_probe(self): | |
| for succeeds in (False,True): | |
| with self.subTest(succeeds=succeeds), tempfile.TemporaryDirectory() as directory: | |
| root = Path(directory) | |
| campaign = root/'campaign' | |
| evaluation = campaign/'evaluation' | |
| evaluation.mkdir(parents=True) | |
| model = evaluation/'model.pt' | |
| model.write_bytes(b'durable final artifact') | |
| (evaluation/'metrics.json').write_text(json.dumps({'status':'complete','model_sha256':checksum(model)})) | |
| (evaluation/'manifest.json').write_text(json.dumps({'checkpoint_sha256':'selected-sha', | |
| 'data_signature':'frozen-data','source_sha256':{name:checksum(ROOT/name) | |
| for name in ('experiment.py','training_model.py')}})) | |
| selected = {'checkpoint_sha256':'selected-sha','data_signature':'frozen-data'} | |
| api = MagicMock(pid=987654321) | |
| api.poll.return_value = None | |
| responses = [io.BytesIO(json.dumps({'status':'ready','checkpoint':str(model),'model':'opensysone'}).encode()), | |
| io.BytesIO(b'{"response":"HTTP probe"}')] | |
| def validate(payload,result): | |
| self.assertFalse((root/'ai/opensysone/deploy/current.json').exists()) | |
| self.assertEqual(result,{'response':'HTTP probe'}) | |
| if not succeeds: | |
| raise ValueError('invalid actual HTTP response') | |
| state = {} | |
| with patch('scripts.fleet_campaign.runner.STOP',False), \ | |
| patch('scripts.fleet_campaign.stage') as stage_mock, \ | |
| patch('scripts.fleet_campaign.subprocess.Popen',return_value=api), \ | |
| patch('scripts.fleet_campaign.urllib.request.urlopen',side_effect=responses) as http, \ | |
| patch('scripts.fleet_campaign.Path.home',return_value=root), \ | |
| patch('jev_harness.validate_response',side_effect=validate): | |
| if succeeds: | |
| deploy(campaign,state,{'port':18081},selected,time.time()+120) | |
| pointer = json.loads((root/'ai/opensysone/deploy/current.json').read_text()) | |
| self.assertEqual(pointer['sha256'],checksum(model)) | |
| self.assertEqual(state['status'],'complete') | |
| api.terminate.assert_not_called() | |
| else: | |
| with self.assertRaisesRegex(ValueError,'invalid actual HTTP'): | |
| deploy(campaign,state,{'port':18081},selected,time.time()+120) | |
| self.assertFalse((root/'ai/opensysone/deploy/current.json').exists()) | |
| api.terminate.assert_called_once() | |
| self.assertEqual(stage_mock.call_args.args[2],'harness_check') | |
| self.assertEqual(http.call_args.args[0].method,'POST') | |
| if __name__ == '__main__': | |
| unittest.main() | |