During autoregressive decoding, generating each new token requires streaming all of the model's weights from High Bandwidth Memory (HBM). For large models this weight movement dominates the time per token.
Write a function estimate_decode_latency(num_params, bytes_per_param, bandwidth_bytes_per_s) that returns a list [latency_ms, tokens_per_sec], where latency_ms is the per-token decode latency in milliseconds and tokens_per_sec is the sustained generation throughput in tokens per second.
Inputs:
Return the two values as a list of floats.