from __future__ import annotations import argparse from decimal import Decimal from pathlib import Path from . import _io def _money(value: str | int | float) -> str: return f"{Decimal(str(value)):.2f}" def import_usage(export: dict, fx_usd_eur: str = "0.92") -> dict: rate = Decimal(str(fx_usd_eur)) records = [] for index, row in enumerate(export.get("usage", export.get("records", [])), start=1): cost_usd = Decimal(str(row.get("cost_usd") or row.get("cost", "0"))) cost_eur = (cost_usd * rate).quantize(Decimal("0.01")) records.append( { "id": row.get("id") or f"usage-{row['period']}-{index}", "period": row["period"], "member_id": row.get("member_id") or row.get("user_id"), "model": row["model"], "tokens": row.get("tokens", 0), "cost_usd": _money(cost_usd), "cost_eur": _money(cost_eur), "source": "openrouter", } ) return { "version": 1, "fx_usd_eur": str(rate), "records": sorted(records, key=lambda item: (item["period"], item["id"])), } def main(argv: list[str] | None = None) -> int: parser = argparse.ArgumentParser(description="Import OpenRouter usage export") parser.add_argument("--input", type=Path, required=True, help="OpenRouter JSON export") parser.add_argument( "--output", type=Path, default=Path(__file__).resolve().parent.parent.parent / "data" / "usage_records.json", ) parser.add_argument("--fx-usd-eur", default="0.92") args = parser.parse_args(argv) payload = import_usage(_io.read_export(args.input), args.fx_usd_eur) _io.write_registry(args.output, payload) print(f"Wrote {len(payload['records'])} usage records → {args.output}") return 0 if __name__ == "__main__": raise SystemExit(main())