DERBACH's picture
download
raw
2.96 kB
import argparse,json
from pathlib import Path
import pandas as pd,numpy as np,yaml
from transformers import AutoTokenizer
from representations.pooling import encode_response
from representations.cache import file_hash
def main():
p=argparse.ArgumentParser(); p.add_argument('--backbone',default='32b'); p.add_argument('--input',default='data/processed/responses.parquet'); p.add_argument('--output'); p.add_argument('--report-suffix'); args=p.parse_args()
cfg=yaml.safe_load(Path(f'configs/backbone_{args.backbone}.yaml').read_text())
tok=AutoTokenizer.from_pretrained(cfg['model'],revision=cfg['revision'],local_files_only=True)
ex=pd.read_parquet(args.input); out=Path(args.output or f'data/processed/tokenized_{args.backbone}.parquet')
records=[]
for i,r in enumerate(ex.to_dict('records')):
e=encode_response(tok,r['prompt'],r['response'],cfg['max_length']); e.update({k:r[k] for k in ['example_id','response_id','prompt_id','feature_index']}); records.append(e)
if (i+1)%2000==0: print(f'tokenized {i+1}/{len(ex)}',flush=True)
df=pd.DataFrame(records); df.to_parquet(out,index=False)
out.with_suffix('.provenance.json').write_text(json.dumps({'source_path':str(args.input),'source_sha256':file_hash(args.input),'tokens_sha256':file_hash(out),'model':cfg['model'],'revision':cfg['revision'],'pooling_sha256':file_hash('representations/pooling.py')},indent=2))
stats={k:{str(q):float(np.percentile(df[k],q)) for q in [50,75,90,95,99,100]} for k in ['prompt_tokens','response_tokens','original_sequence_length']}
info={'model':cfg['model'],'revision':cfg['revision'],'max_length':cfg['max_length'],'examples':len(df),'truncated_fraction':float(df.truncated.mean()),'prompt_truncated_fraction':float((df.removed_prompt_tokens>0).mean()),'percentiles':stats}
suffix=args.report_suffix if args.report_suffix is not None else ('' if Path(args.input).stem=='responses' else '_'+Path(args.input).stem)
info.update(input=str(args.input),output=str(out))
Path(f'outputs/token_lengths_{args.backbone}{suffix}.json').write_text(json.dumps(info,indent=2))
report=f'# Token boundaries and lengths: {args.backbone}\n\n'+pd.DataFrame(stats).to_markdown()+'\n\n'+json.dumps({k:v for k,v in info.items() if k!='percentiles'},indent=2)+'\n\n'
report+='Official chat template, non-thinking completed assistant turn. HelpSteer role separators are converted to chat turns. Pool only tokens fully contained in the final response character span; exclude template, prompt and padding. End token is exclusive. Overlength examples preserve all prompt tokens up to half the sequence budget; longer prompts retain beginning and end. Response truncation keeps the beginning and records every removed token. No response content is silently discarded.\n'
Path(f'reports/token_lengths_{args.backbone}{suffix}.md').write_text(report); print(json.dumps(info,indent=2),flush=True)
if __name__=='__main__':main()

Xet Storage Details

Size:
2.96 kB
·
Xet hash:
32533682317e30dfe43bd3d731d4200a5f2e19ee44ac2fc76e2f4b7561c2aaea

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.