import json,sys,collections
sp=sys.argv[1]
def kind(m):
    first=m[0]['content']
    if first.startswith('I will provide you with a JSON'): return 'fix'
    if 'You are a literary critic' in first: return 'judge'
    if first.startswith('Your task is to predict the next speaker'): return 'nsp'
    if 'Your task is to provide the environmental feedback' in first: return 'env'
    return 'target'
for f in ['requests_regular','requests_full','requests_faults','requests_extra']:
    c=collections.Counter(); seq=collections.defaultdict(list); prov=collections.Counter(); extra=collections.Counter()
    for l in open(f'{sp}/e2e/{f}.jsonl',encoding='utf-8'):
        d=json.loads(l)
        if not d['path'].endswith('/chat/completions'): c['other-path']+=1; continue
        b=d['body']; k=kind(b['messages'])
        c[(k,b.get('model'),b.get('temperature'),b.get('max_tokens'))]+=1
        prov[(k,json.dumps(b.get('provider'),sort_keys=True))]+=1
        for key in b:
            if key not in('model','messages','temperature','max_tokens','provider','stream','usage'): extra[(k,key,json.dumps(b[key]))]+=1
        if k=='target': seq[json.dumps(b['messages'])].append(b.get('temperature'))
    print('==',f); 
    for a,b in sorted(c.items(),key=str): print(a,b)
    print('prov',dict(prov)); print('extra params',dict(extra))
    if f=='requests_faults':
        s=collections.Counter(); byname=collections.defaultdict(collections.Counter)
        for m,t in seq.items():
            name=json.loads(m)[0]['content'].split('\n')[0][len('You are '):].split(' from ')[0]
            s[tuple(t)]+=1; byname[name[0] if name[0] in 'ABCDE' else 'other'][tuple(t)]+=1
        print('temp sequences',dict(s)); print({k:dict(v) for k,v in byname.items()})
