from __future__ import annotations import time, json, argparse from pathlib import Path from dir2md.core import Config, generate_markdown_report def run_case(root: Path, preset: str, mode: str | None, budget: int, file_budget: int) -> dict: cfg = Config( root=root, output=root/"_BENCH.md", include_globs=[], exclude_globs=[], omit_globs=[], respect_gitignore=True, follow_symlinks=False, max_bytes=200_000, max_lines=2000, include_contents=True, only_ext=None, add_stats=True, add_toc=False, llm_mode=(mode or "ref"), budget_tokens=budget, max_file_tokens=file_budget, dedup_bits=16, sample_head=120, sample_tail=40, strip_comments=False, emit_manifest=False, preset=preset, explain_capsule=True, ) t0 = time.perf_counter() md = generate_markdown_report(cfg) dt = time.perf_counter() - t0 est = md.split("Estimated tokens (prompt): `")[-1].split("`")[0] return {"preset": preset, "mode": cfg.llm_mode, "elapsed_sec": round(dt,3), "est_tokens": int(est)} def main(): ap = argparse.ArgumentParser() ap.add_argument("path", nargs="?", default=".") ns = ap.parse_args() root = Path(ns.path).resolve() cases = [ ("iceberg", None, 6000, 1000), ("pro", "summary", 6000, 1000), ("pro", "ref", 4000, 1000), ("pro", "inline", 8000, 1200), ] rows = [run_case(root, *c) for c in cases] print(json.dumps(rows, indent=2)) if __name__ == "__main__": main()