import argparse
import json
from pathlib import Path
import sys
SCRIPT_DIR = Path(__file__).resolve().parent
if str(SCRIPT_DIR) not in sys.path:
sys.path.insert(0, str(SCRIPT_DIR))
from errors import RnnFfiError
from ffi import BenchmarkRecord, FfiLibrary
from model import BenchmarkBlob
def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument("--model-name", type=str, default="sample_model.rnn")
parser.add_argument("--precision", type=str, default="f32")
parser.add_argument("--library-path", type=str, default=None)
parser.add_argument("--json", action="store_true")
args = parser.parse_args()
ffi = FfiLibrary(library_path=args.library_path)
bench = BenchmarkBlob.create(ffi=ffi)
record = BenchmarkRecord(
model_name=args.model_name,
precision=args.precision,
elapsed_ms=123,
iterations=42,
avg_loss=0.12,
last_loss=0.08,
output_bytes=2048,
)
blob = bench.encode(record)
decoded = bench.decode(blob)
payload = {
"model_name": decoded.model_name,
"precision": decoded.precision,
"iterations": decoded.iterations,
"encoded_bytes": len(blob),
}
if args.json:
print(json.dumps(payload))
else:
for k, v in payload.items():
print(f"{k}={v}")
if __name__ == "__main__":
try:
main()
except FileNotFoundError as exc:
print(str(exc), file=sys.stderr)
raise SystemExit(2)
except RnnFfiError as exc:
print(f"FFI error: {exc}", file=sys.stderr)
raise SystemExit(3)