For the full eval set going through the batch API, I'd keep an eye on markForRetry. If errored rows sit waiting for a retry while the succeeded ones get scored, the eval number comes from whatever finished first. I hold the report until every custom_id has a result or a recorded error.