mirror of
https://github.com/morluto/rea.git
synced 2026-10-23 14:22:30 -05:00
Fixes #5148. Add opt-in durable managed member summaries and authenticated paging while preserving complete default output, original Evidence, cleanup ownership and queued cancellation. Verified with bounded real Newtonsoft/Redux/Rust tasks, independent oracles, 556 focused tests and the expanded domain gate; paired token estimates and latency tradeoffs are recorded in experiments/analysis-efficiency/managed-cli.md.
85 lines
6.7 KiB
Python
85 lines
6.7 KiB
Python
"""Summarize completed CLI trials; token counts are estimates, not model usage."""
|
|
import argparse
|
|
import hashlib
|
|
import json
|
|
import statistics
|
|
from pathlib import Path
|
|
import tiktoken
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('root', type=Path)
|
|
parser.add_argument('--output', type=Path, required=True)
|
|
args = parser.parse_args()
|
|
root = args.root
|
|
inputs = json.loads((root / 'measurement-inputs.json').read_text())
|
|
expected = inputs['expected_runtime_bindings']
|
|
assert expected['complete']['git_revision'] == inputs['baseline_revision']
|
|
assert expected['selected']['git_revision'] == inputs['feature_parent_revision']
|
|
assert expected['complete']['root'] != expected['selected']['root']
|
|
assert expected['complete']['compiled_cli_sha256'] != expected['selected']['compiled_cli_sha256']
|
|
assert expected['complete']['source_diff_sha256'] == hashlib.sha256(b'').hexdigest()
|
|
assert expected['complete']['untracked_source_sha256'] == hashlib.sha256(b'[]').hexdigest()
|
|
enc = tiktoken.get_encoding('cl100k_base')
|
|
count = lambda text: len(enc.encode(text, disallowed_special=()))
|
|
compact = lambda obj: json.dumps(obj, ensure_ascii=False, separators=(',', ':'))
|
|
runs = []
|
|
for case in sorted(root.glob('pair-*')):
|
|
if not case.is_dir():
|
|
continue
|
|
report = json.loads((case / 'report.json').read_text())
|
|
assert report['status'] == 'passed' and report['cleanup_verified']
|
|
assert report['runtime_binding_verified']
|
|
assert report['runtime_binding'] == expected[report['mode']], case.name
|
|
assert str(Path(report['runtime']).resolve()) == report['runtime_binding']['root']
|
|
receipt = next(json.loads(line) for line in reversed(case.with_name(case.name + '.log').read_text().splitlines()) if line.startswith('{"resource_scope":'))
|
|
obs = receipt['payload_resource_observation']
|
|
assert receipt['abort'] is None and receipt['payload_resource_observation_verified']
|
|
assert obs['payload_exit_code'] == 0 and obs['payload_cleanup_verified']
|
|
assert obs['resource_events']['memory.events']['oom_kill'] == 0
|
|
tokens = {'question_and_recipe': count(report['question'] + '\n' + report['recipe']),
|
|
'arguments': sum(count(compact(call['arguments'])) for call in report['calls']),
|
|
'help_and_replies': sum(count((case / call['stdout_file']).read_text()) for call in report['calls'])}
|
|
tokens['whole_task'] = sum(tokens.values())
|
|
runs.append({'case': case.name, 'mode': report['mode'], 'cache': report['cache'], 'runtime': report['runtime'], 'runtime_binding': report['runtime_binding'], 'runtime_binding_audit_ms': report['runtime_binding_audit_ms'],
|
|
'wall_seconds': receipt['elapsed_seconds'], 'cpu_seconds': obs['cpu_stat']['usage_usec'] / 1e6,
|
|
'peak_process_family_bytes_including_page_cache': obs['memory_peak_bytes'],
|
|
'tokens_estimated': tokens, 'calls': report['calls'],
|
|
'parent_evidence_id': report['parent_evidence_id'], 'parent_semantic_sha256': report['parent_semantic_sha256'],
|
|
'answer_sha256': report['answer_sha256'], 'oracle_verified': report['oracle_verified'],
|
|
'cleanup_verified': True, 'resource_events': obs['resource_events']})
|
|
assert len(runs) == 12
|
|
for key in ['answer_sha256', 'parent_semantic_sha256', 'parent_evidence_id']:
|
|
assert len({row[key] for row in runs}) == 1, key
|
|
summary = {}
|
|
for cache in ['cold', 'warm']:
|
|
summary[cache] = {}
|
|
for mode in ['complete', 'selected']:
|
|
rows = [r for r in runs if r['mode'] == mode and r['cache'] == cache]
|
|
assert len(rows) == 3
|
|
summary[cache][mode] = {key: {'median': statistics.median(r[key] for r in rows), 'min': min(r[key] for r in rows), 'max': max(r[key] for r in rows)} for key in ['wall_seconds', 'cpu_seconds', 'peak_process_family_bytes_including_page_cache']}
|
|
summary[cache][mode]['whole_task_tokens_estimated'] = [r['tokens_estimated']['whole_task'] for r in rows]
|
|
result = {'status': 'passed', 'tokenizer': 'tiktoken==0.12.0/cl100k_base; estimates, not model usage',
|
|
'context_scope': 'Question, supplied command recipe, actual selected-command help, all logical CLI argv and all stdout. No model invoked; reasoning, framing, irrelevant tool discovery and actual native-agent usage unmeasured.',
|
|
'cache_scope': 'cold disables Node compile cache; warm primes the identical workflow once per runtime/mode before timing. Fresh processes and isolated HOME each trial; OS page cache uncontrolled.',
|
|
'resource_scope': 'Whole task driver plus all CLI children; includes pre/post source-and-compiled-runtime binding verification, bundle publication/authentication, help, extra calls and local answer/oracle checking. Kernel cgroup peak includes file cache; not sampled RSS. Download/build/oracle preparation and priming excluded.',
|
|
'acquisition': json.loads((root / 'acquisition.json').read_text()), 'measurement_inputs': inputs,
|
|
'summary': summary, 'runs': runs}
|
|
native = root / 'native-control'
|
|
if native.exists():
|
|
binding = json.loads((native / 'runtime-binding.json').read_text())
|
|
assert binding['runtime_binding_verified'] and binding['runtime_binding'] == expected['complete']
|
|
assert str(Path(binding['runtime']).resolve()) == binding['runtime_binding']['root']
|
|
receipt = next(json.loads(line) for line in reversed((root / 'native-control.log').read_text().splitlines()) if line.startswith('{"resource_scope":'))
|
|
obs = receipt['payload_resource_observation']
|
|
assert receipt['abort'] is None and receipt['payload_resource_observation_verified'] and obs['payload_exit_code'] == 0 and obs['payload_cleanup_verified']
|
|
baseline_case = root / next(run['case'] for run in runs if run['mode'] == 'complete')
|
|
assert json.loads((native / 'answer.json').read_text()) == json.loads((baseline_case / 'answer.json').read_text())
|
|
control_source = Path(__file__).with_name('managed-cli-local-control.py').read_text()
|
|
result['existing_native_control'] = {'runtime': binding['runtime'], 'runtime_binding': binding['runtime_binding'], 'runtime_binding_audit_ms': binding['runtime_binding_audit_ms'], 'repetitions': 1,
|
|
'tokens_estimated_script_plus_help_plus_answer': count(control_source) + count((native / 'help.txt').read_text()) + count((native / 'answer.json').read_text()),
|
|
'token_scope': 'Projection source, original CLI help and returned answer; excludes shared question and launcher argv. No actual model usage measured.',
|
|
'wall_seconds': receipt['elapsed_seconds'], 'cpu_seconds': obs['cpu_stat']['usage_usec'] / 1e6,
|
|
'peak_process_family_bytes_including_page_cache': obs['memory_peak_bytes'], 'answer_matches': True, 'cleanup_verified': True}
|
|
args.output.write_text(json.dumps(result, indent=2) + '\n')
|
|
print(json.dumps(summary, indent=2))
|