| """Independently authored phrasings held out from teacher generation and training.""" |
| import json |
| from pathlib import Path |
| from tinyquery.data import serialize |
|
|
| PHRASES={ |
| 'all':['I need everything in {table}.','all {table} pls','{table} का सारा डेटा चाहिए।','{table} ka sara data chahiye'], |
| 'project':['Just the {column} values from {table}, please.','{table} only {column} show','{table} से सिर्फ {column} दिखाना।','bas {table} ke {column} dikha do'], |
| 'project_eq':['In {table}, give me {column} for {category} {value}.','{table} {category} {value} only {column}','{table} में {category} {value} हो तो उनका {column} बताओ।','{table} me {category} {value} walon ka {column} batao'], |
| 'gt':['Which {table} entries have {numeric} above {number}?','{table} {numeric} more than {number}','{table} में किनका {numeric} {number} से ज़्यादा है?','{table} me {numeric} {number} se upar wale kaun hain'], |
| 'gte':['Include {table} records at {number} or above in {numeric}.','{table} {numeric} minimum {number} include same','{table} में {numeric} कम से कम {number} होना चाहिए।','{table} me {numeric} kam se kam {number} ho'], |
| 'lt':['Find {table} records below {number} in {numeric}.','{table} {numeric} less {number}','{table} में {numeric} {number} से कम वाले रिकॉर्ड लाओ।','{table} me {numeric} {number} se kam wale lao'], |
| 'lte':['From {table}, include {numeric} values up to and including {number}.','{table} {numeric} max {number} equal also','{table} में {numeric} {number} या उससे कम हो।','{table} me {numeric} {number} ya usse kam ho'], |
| 'count':['How big is {table}, measured in rows?','{table} total rows how much','{table} में कुल कितनी पंक्तियाँ हैं?','{table} me total kitni rows hain'], |
| 'sum':['Add up {numeric} across {table}.','{table} {numeric} all add','{table} के {numeric} का जोड़ बताओ।','{table} ke {numeric} ka jod batao'], |
| 'avg':['What does {numeric} average out to in {table}?','{table} avg {numeric} tell','{table} में {numeric} का औसत क्या है?','{table} me {numeric} ka average kya hai'], |
| 'top':['Give me {limit} entries in {table} with the largest {numeric}, largest first.','{table} top {limit} by {numeric} big first','{table} में सबसे ज़्यादा {numeric} वाली {limit} पंक्तियाँ घटते क्रम में दिखाओ।','{table} me sabse bade {numeric} wali {limit} rows descending dikhao'], |
| 'group_count':['Break down the number of {table} rows by {category}.','{table} count per {category}','{table} में हर {category} की गिनती अलग-अलग बताओ।','{table} me har {category} ki count alag batao'], |
| 'distinct':['Which different {category} values occur in {table}?','{table} {category} unique only','{table} में {category} के अलग-अलग मान कौन से हैं?','{table} me {category} ki unique values kya hain'], |
| 'null':['Find {table} records with no {column} value (NULL).','{table} {column} null records','{table} में जिनका {column} NULL है वे रिकॉर्ड दिखाओ।','{table} me jinka {column} NULL hai wo dikhao'], |
| 'list_tables':['What tables can I query here?','tables here list','यहाँ कौन-कौन सी टेबल हैं?','yahan kaunsi tables hain'], |
| 'ambiguous':['Pick the best entries in {table}.','{table} best ones','{table} में सबसे अच्छे रिकॉर्ड चुनो।','{table} me best records chun lo'], |
| 'weather':['What is the weather like in {city}? Use {unit}.','{city} weather {unit} pls','{city} का मौसम {unit} में बताओ।','{city} ka weather {unit} me batao'], |
| 'read_file':['Open {path} and read its text.','{path} read pls','{path} फ़ाइल पढ़कर दिखाओ।','{path} file padh kar dikhao'], |
| 'search':['Find documentation about {query}.','docs find {query}','{query} के बारे में दस्तावेज़ खोजो।','{query} ke bare me docs dhundho'], |
| 'ticket':['Fetch the details for ticket {ticket_id}.','ticket {ticket_id} details','टिकट {ticket_id} का विवरण लाओ।','ticket {ticket_id} ki details lao'], |
| } |
|
|
|
|
| def main(): |
| base=Path('data/tinyquery'); cases={} |
| for line in (base/'test.jsonl').read_text().splitlines(): |
| r=json.loads(line) |
| key=(r['operation'],r['language'],r['backend']) |
| if r['operation'] in PHRASES and key not in cases: cases[key]=r |
| with (base/'manual.jsonl').open('w') as stream: |
| for (op,lang,backend),r in cases.items(): |
| index=['en','noisy_en','hi','hinglish'].index(lang) |
| r['question']=PHRASES[op][index].format(**r['slots']) |
| r['prompt']=serialize(r['context'],r['question']); r['id']='manual_'+r['id'] |
| r['provenance']='Assistant-authored held-out phrasing; never sent to teacher or used in training' |
| stream.write(json.dumps(r,ensure_ascii=False)+'\n') |
| print('manual cases',len(cases)) |
|
|
|
|
| if __name__=='__main__': main() |
|
|