File size: 3,837 Bytes
3fd1a35
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env python3
"""Build a new, verified release archive after board acceptance. Never overwrite it."""
import argparse
import hashlib
import json
from pathlib import Path
import shutil
import tarfile


def digest(path):
    with path.open('rb') as f:return hashlib.file_digest(f,'sha256').hexdigest()


def main():
    p=argparse.ArgumentParser(description=__doc__)
    p.add_argument('--root',type=Path,required=True)
    a=p.parse_args()
    root=a.root.resolve();source=root/'source'
    package=root/'package/mindnano-ling3-rk3588-selective-20260911'
    archive=root/(package.name+'.tar.gz')
    partial=archive.with_suffix(archive.suffix+'.building')
    if archive.exists() or partial.exists():raise FileExistsError('archive already exists')
    result=json.loads((root/'validation/results.json').read_text())
    assert result['passed'] and all(x['bitwise_equal'] for x in result['logit_equality'])
    assert result['health_restored']['status']=='ok'
    api=json.loads((root/'validation/api.json').read_text())
    cache=json.loads((root/'validation/prefix-cache.json').read_text())
    assert api['passed'] and cache['passed']
    manifest=json.loads((package/'MANIFEST.json').read_text())
    assert manifest['files']['mindnano-infer-engine']['sha256']==digest(root/'build/mindnano-infer')
    readme_template=source/'docs/deployment-selective-readme.md'
    if not readme_template.is_file():readme_template=source/'README.md'
    shutil.copyfile(readme_template,package/'README.md')
    merge=package/'ling3-tiny-w4.merge.json'
    if merge.exists():merge.rename(package/'MODEL.json')
    model=json.loads((package/'MODEL.json').read_text())
    assert model['all_payload_sha256_valid'] and model['source_payloads_verified']
    validation=dict(passed=True,model_merge=model,portable_health=result['health'],
        portable_api_passed=api['passed'],prefix_cache_passed=cache['passed'],
        performance=dict(context=65536,input_tokens=128,output_tokens=64,warm_request_excluded=True,
            runs=3,**result['performance']),
        run_metrics=[x['mindnano_metrics'] for x in result['runs']],
        full_candidate_logit_comparison=result['logit_equality'],
        source_weight_rmse=0.005611173617454249,
        fixed_prefix_tv=dict(nothink=0.08169259726325992,think=0.09401621062421926),
        notes='Speed is package acceptance under current background load; quality is fixed-prefix, not long generation')
    (package/'VALIDATION.json').write_text(json.dumps(validation,ensure_ascii=False,indent=2)+'\n')
    def keep(info):
        if '__pycache__' in Path(info.name).parts or info.name.endswith('.pyc'):return None
        info.uid=info.gid=0;info.uname=info.gname='root'
        return info
    with tarfile.open(package/'SOURCE.tar.gz','w:gz',compresslevel=6) as tar:
        for name in ('CMakeLists.txt','LICENSE','LICENSES.md','src','include','tools','tests','third_party','deployment','docs'):
            if not (source/name).exists():continue
            tar.add(source/name,arcname='Ling3RKNN/'+name,filter=keep)
    checks=[]
    for file in sorted(package.iterdir()):
        if file.is_file() and file.name!='SHA256SUMS':checks.append(digest(file)+'  '+file.name)
    (package/'SHA256SUMS').write_text('\n'.join(checks)+'\n')
    print(json.dumps(dict(phase='archive',files=[x.name for x in sorted(package.iterdir())],
                         performance=result['performance'])),flush=True)
    with tarfile.open(partial,'w:gz',compresslevel=6) as tar:
        tar.add(package,arcname=package.name,filter=keep)
    partial.rename(archive)
    sha=digest(archive)
    archive.with_name(archive.name+'.sha256').write_text(sha+'  '+archive.name+'\n')
    print(json.dumps(dict(archive=str(archive),bytes=archive.stat().st_size,sha256=sha)),flush=True)


if __name__=='__main__':main()