From e3c425c3cd9a31b59ed631987675ece5dd00e22b Mon Sep 17 00:00:00 2001 From: firestar5683 <168790843+firestar5683@users.noreply.github.com> Date: Sat, 19 Sep 2026 16:57:15 -0700 Subject: [PATCH] Allow bounded explicit local startup buffer validation candidate --- .../ace_chestnut_20260916/ace_worker.py | 6 ++++-- roadscore/prototype/startup_buffer.py | 14 ++++++++++++++ roadscore/prototype/test_resident_worker_reset.py | 2 +- roadscore/prototype/test_startup_buffer.py | 14 ++++++++++++++ 4 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 roadscore/prototype/startup_buffer.py create mode 100644 roadscore/prototype/test_startup_buffer.py diff --git a/roadscore/experiments/ace_chestnut_20260916/ace_worker.py b/roadscore/experiments/ace_chestnut_20260916/ace_worker.py index dbf2860cf3..e3b745b28e 100644 --- a/roadscore/experiments/ace_chestnut_20260916/ace_worker.py +++ b/roadscore/experiments/ace_chestnut_20260916/ace_worker.py @@ -31,6 +31,8 @@ if resident and composition_policy!='hook-cache-v1':raise ValueError('Resident m if resident and (G/'session_request.json').exists():raise RuntimeError('Unacknowledged resident request requires owner inspection before restart') from contextlib import nullcontext from resident_session import session_lease,validate_session +from startup_buffer import initial_target +initial_buffer_target=initial_target(os.environ,composition_policy,POLICY.initial_buffer_seconds) from tinygrad import Device profile=selected();preparation_id=f'{profile}_{time.time_ns()}' lock=open(G/'gpu.lock','w');fcntl.flock(lock,fcntl.LOCK_EX|fcntl.LOCK_NB) @@ -87,7 +89,7 @@ try: write_json(G/'ace_worker_state.json',{'pid':os.getpid(),'generation_seed':base_seed,'composition_policy':composition_policy,'profile':profile,'phase':'preparing','accepted_chunks':0,'accepted_buffer_seconds':0.,'elapsed_seconds':0.,'resident_reused':bool(selection)}) print('ACE_PREPARING',profile,flush=True) initial=None;last=None;preparation=[];slot=0;first_accepted_audio_seconds=None - while initial is None or len(initial)/480008:raise RuntimeError('Initial buffer did not fill within bounded preparation') save_wave(G/'ace_initial.wav',initial);np.save(G/'ace_initial.npy',last) - write_json(G/'ace_initial.json',{'generation_seed':base_seed,'composition_policy':composition_policy,'composer':'ace','startup_seconds':time.monotonic()-session_started,'first_accepted_audio_seconds':first_accepted_audio_seconds,'model_load_seconds':0. if selection else model_load_seconds,'resident_model_load_seconds':model_load_seconds,'worker_uptime_seconds':time.monotonic()-BOOT,'resident_reused':bool(selection),'resident_capable':resident,'resident_model_identity':str(id(c)),'conditioning_bank_sha256':planned.bank_hash if resident else None,'host_peak_rss_kib':resource.getrusage(resource.RUSAGE_SELF).ru_maxrss,'duration':len(initial)/48000,'source_identity':'kpop_control','prepared_profile':profile if windowed else 'legacy','preparation_id':preparation_id,'continuation_policy':'quality-gated fixed lookahead','generation':preparation,'prepared_identity':True,'output_gain':POLICY.output_gain,'created_wall':time.time()}) + write_json(G/'ace_initial.json',{'generation_seed':base_seed,'composition_policy':composition_policy,'composer':'ace','startup_seconds':time.monotonic()-session_started,'first_accepted_audio_seconds':first_accepted_audio_seconds,'model_load_seconds':0. if selection else model_load_seconds,'resident_model_load_seconds':model_load_seconds,'worker_uptime_seconds':time.monotonic()-BOOT,'resident_reused':bool(selection),'resident_capable':resident,'resident_model_identity':str(id(c)),'conditioning_bank_sha256':planned.bank_hash if resident else None,'host_peak_rss_kib':resource.getrusage(resource.RUSAGE_SELF).ru_maxrss,'duration':len(initial)/48000,'initial_buffer_target_seconds':initial_buffer_target,'source_identity':'kpop_control','prepared_profile':profile if windowed else 'legacy','preparation_id':preparation_id,'continuation_policy':'quality-gated fixed lookahead','generation':preparation,'prepared_identity':True,'output_gain':POLICY.output_gain,'created_wall':time.time()}) write_json(G/'ace_worker_state.json',{'pid':os.getpid(),'generation_seed':base_seed,'composition_policy':composition_policy,'profile':profile,'phase':'READY','initial_buffer_seconds':len(initial)/48000}) (G/'request.json').unlink(missing_ok=True);ready.write_text('ace');print('ACE_READY',flush=True) with session_lease(G) if resident else nullcontext():prepare_session() diff --git a/roadscore/prototype/startup_buffer.py b/roadscore/prototype/startup_buffer.py new file mode 100644 index 0000000000..92c21feb17 --- /dev/null +++ b/roadscore/prototype/startup_buffer.py @@ -0,0 +1,14 @@ +"""Explicit measured event-buffer candidate; frozen cohorts keep their own policy.""" +import math + + +def initial_target(environ, composition_policy, default=112.): + value = environ.get('ROADSCORE_INITIAL_BUFFER_SECONDS') + if value is None: + return default + if composition_policy != 'hook-cache-v1': + raise ValueError('Initial buffer override is only supported for local cached planning') + value = float(value) + if not math.isfinite(value) or not 80 <= value <= default: + raise ValueError('Validated candidate range is 80 to 112 seconds') + return value diff --git a/roadscore/prototype/test_resident_worker_reset.py b/roadscore/prototype/test_resident_worker_reset.py index 9240e75d50..76bc9a8444 100644 --- a/roadscore/prototype/test_resident_worker_reset.py +++ b/roadscore/prototype/test_resident_worker_reset.py @@ -42,7 +42,7 @@ def worker(tmp_path, monkeypatch): G=tmp_path,Path=Path,os=os,time=time,np=np,resource=resource,BOOT=time.monotonic(), ready=tmp_path/'worker_ready',CachedComposition=Plan,QualifiedGenerator=Generator, generate=None,HOOK_POLICY=policy,POLICY=policy,windowed=True,resident=True,c=model, - model_load_seconds=12.,record_for=lambda job:None,sample_seed=sample_seed, + model_load_seconds=12.,initial_buffer_target=.01,record_for=lambda job:None,sample_seed=sample_seed, write_json=lambda path,value:saved.update({path.name:value}), save_wave=lambda path,wave:audio.append(wave.copy())) exec(code,state) diff --git a/roadscore/prototype/test_startup_buffer.py b/roadscore/prototype/test_startup_buffer.py new file mode 100644 index 0000000000..88d3a5c948 --- /dev/null +++ b/roadscore/prototype/test_startup_buffer.py @@ -0,0 +1,14 @@ +import pytest +from startup_buffer import initial_target + +def test_default_and_explicit_current_bank_candidate(): + assert initial_target({},'hook-cache-v1')==112 + assert initial_target({'ROADSCORE_INITIAL_BUFFER_SECONDS':'80'},'hook-cache-v1')==80 + +@pytest.mark.parametrize('value',['0','79','113','nan','inf']) +def test_unsupported_reserve_rejected(value): + with pytest.raises(ValueError):initial_target({'ROADSCORE_INITIAL_BUFFER_SECONDS':value},'hook-cache-v1') + +def test_frozen_policy_unchanged_and_rejects_override(): + assert initial_target({},'prepared-v1')==112 + with pytest.raises(ValueError):initial_target({'ROADSCORE_INITIAL_BUFFER_SECONDS':'80'},'prepared-v1')