TinyQuery-140M / tinyquery /scope_data.py
karmx's picture
Release TinyQuery 139.7M from scratch with frozen weights, reproducible Mac evaluations and runtime source
b296ad4 verified
Raw
History Blame Contribute Delete
3.06 kB
"""Teach exact project-scope and discovery-table copying across identifier formats."""
import argparse
import hashlib
import json
from pathlib import Path
import random
import re
import shutil
import string
from tokenizers import Tokenizer
from sqlglot import Tokenizer as SQLTokenizer
from tinyquery.data import compact,ddls,serialize
def main():
p=argparse.ArgumentParser();p.add_argument('--source',default='data/tinyquery-v4')
p.add_argument('--seed-source',default='data/tinyquery');p.add_argument('--out',default='data/tinyquery-v5')
args=p.parse_args();source=Path(args.source);seeds=Path(args.seed_source);out=Path(args.out);out.mkdir(parents=True,exist_ok=True)
for name in ['validation.jsonl','test.jsonl','manual.jsonl','tokenizer.json']:shutil.copy2(source/name,out/name)
tokenizer=Tokenizer.from_file(str(source/'tokenizer.json'))
chunks=sorted({tokenizer.decode([i]) for i in range(tokenizer.get_vocab_size()) if re.fullmatch('[a-z]{1,8}',tokenizer.decode([i]))})
rng=random.Random(99335);counts={'replay':0,'scope':0,'discovery':0};seen=set()
with (out/'train.jsonl').open('w') as stream:
def emit(row,kind):
key=hashlib.sha256(row['prompt'].encode()).hexdigest()
if key in seen:return
seen.add(key);counts[kind]+=1;stream.write(json.dumps(row,ensure_ascii=False)+'\n')
for line in (source/'train.jsonl').open():emit(json.loads(line),'replay')
for line in (seeds/'train.jsonl').open():
row=json.loads(line)
if row['target']['action']!='call':continue
a=row['target']['arguments'];kind=None
if 'project_id' in a:
style=rng.randrange(3)
project=(''.join(rng.choices(string.ascii_lowercase,k=20)) if style==0 else
''.join(rng.choices(chunks,k=4)) if style==1 else
'-'.join(''.join(rng.choices(string.hexdigits[:16],k=k)) for k in [8,4,4,4,12]))
row['context']['project_id']=project;a['project_id']=project;kind='scope'
if 'table' in a:
old=a['table']
while True:
new=''.join(rng.choices(chunks,k=4))
if len(new)>=6 and new.upper() not in SQLTokenizer.KEYWORDS:break
row['question']=re.sub(r'(?<![A-Za-z0-9_])'+re.escape(old)+r'(?![A-Za-z0-9_])',new,row['question'])
row['slots']['table']=new;a['table']=new
if row['context']['schema']:row['context']['schema']=ddls(row['slots'])
kind='discovery'
if kind:
row['id']+='_scope_99335';row['sample_weight']=4
row['provenance']+='; exact copying of arbitrary project scope and discovery table identifiers'
row['response']=compact(row['target']);row['prompt']=serialize(row['context'],row['question'])
emit(row,kind)
(out/'grounding-stats.json').write_text(json.dumps(counts,indent=2));print(counts)
if __name__=='__main__':main()