#!/usr/bin/env python3 """Extract soong-lab's live 9 design-tool schemas as OpenAI-function form. Run inside the deployed soong-lab venv (backend/.venv) with cwd=backend so `soong_lab` imports. Monkeypatches register_tool to capture each tool's name/input_schema/description at registration (handlers are never invoked, so dummy store/portrait_service are fine). Emits a `tools` array in the shape the NVFP4 calib tool-call-XML slice needs (brokkr R36 spec, 2026-07-14). """ import json import soong_lab.bifrost.tools as T captured = [] def _fake_register_tool(registry, name, input_schema, handler=None, description=None, **kw): captured.append({ "type": "function", "function": { "name": name, "description": description or "", "parameters": input_schema, }, }) T.register_tool = _fake_register_tool class _Dummy: def __getattr__(self, k): return _Dummy() def __call__(self, *a, **k): return _Dummy() T.register_design_tools(_Dummy(), _Dummy(), _Dummy()) out = "/tmp/soong_tools_v0313.json" with open(out, "w") as f: json.dump(captured, f, indent=2) print(f"captured {len(captured)} tools -> {out}") print("names:", [c["function"]["name"] for c in captured])