SPB Git forge

spb/doc-api

Public
2commits 1branches 0releases
15.7 MBsize
maindefault branch
13 days agolast push
Python 88.3% TypeScript 7.6% Shell 4.1%
2.0 KB · 45 lines python
Raw Blame History
1import yaml, json, re, sys2spec = yaml.safe_load(open('sources/openai/openapi/openapi-master.yaml'))3paths = spec['paths']4comps = spec['components']['schemas']5PFX = ('/agents', '/vaults', '/chatkit', '/threads', '/assistants')6out = {}7refs = set()8def collect(o):9    if isinstance(o, dict):10        for k, v in o.items():11            if k == '$ref': refs.add(v.split('/')[-1])12            else: collect(v)13    elif isinstance(o, list):14        for v in o: collect(v)15for p, ops in paths.items():16    if not p.startswith(PFX): continue17    for m, op in ops.items():18        if m not in ('get','post','delete','put','patch'): continue19        meta = op.get('x-oaiMeta', {})20        ex = meta.get('examples', {})21        req = ex.get('request', {}) if isinstance(ex, dict) else {}22        rec = {23          'operationId': op.get('operationId'), 'summary': op.get('summary'),24          'description': op.get('description'), 'deprecated': op.get('deprecated'),25          'parameters': op.get('parameters'), 'requestBody': op.get('requestBody'),26          'responses': op.get('responses'),27          'meta': {k: v for k, v in meta.items() if k != 'examples'},28          'curl': req.get('curl') if isinstance(req, dict) else None,29          'example_response': ex.get('response') if isinstance(ex, dict) else None,30        }31        collect(rec['parameters']); collect(rec['requestBody']); collect(rec['responses'])32        out[f'{m.upper()} {p}'] = rec33json.dump(out, open('tmp/agents/spec_ops.json','w'), indent=1, default=str)34# resolve schema refs transitively35seen = set(); todo = list(refs)36while todo:37    r = todo.pop()38    if r in seen or r not in comps: continue39    seen.add(r); collect(comps[r])40    todo.extend(refs - seen)41schemas = {k: comps[k] for k in sorted(seen)}42json.dump(schemas, open('tmp/agents/spec_schemas.json','w'), indent=1, default=str)43print(len(out), 'ops;', len(schemas), 'schemas')44for k in out: print(k, '| beta=', out[k]['meta'].get('beta'), '| group=', out[k]['meta'].get('group'), '| dep=', out[k]['deprecated'])45