Source: [Batch AI results: reconcile input identities before using the output — Skills for Business](<https://skillsforbusiness.ai/blog/batch-ai-results-reconcile-input-identities/>)

[← All articles](https://skillsforbusiness.ai/blog/)

Workplace adoption · Guide

# Batch AI results: reconcile input identities before using the output

A finished batch job can still leave a business dataset incomplete. Match every input to its outcome, detect duplicate IDs and separate success from acceptance.

[Skills for Business](https://skillsforbusiness.ai/blog/editorial/)5 November 20267 min read

On this page

1.  [Start with the submission record, not the results file](https://skillsforbusiness.ai/blog/batch-ai-results-reconcile-input-identities/#start-with-the-submission-record-not-the-results-file)
2.  [Equal counts can conceal both an omission and a duplicate](https://skillsforbusiness.ai/blog/batch-ai-results-reconcile-input-identities/#equal-counts-can-conceal-both-an-omission-and-a-duplicate)
3.  [Reconcile sets and multiplicity before evaluating content](https://skillsforbusiness.ai/blog/batch-ai-results-reconcile-input-identities/#reconcile-sets-and-multiplicity-before-evaluating-content)
4.  [Separate a recorded outcome from an accepted answer](https://skillsforbusiness.ai/blog/batch-ai-results-reconcile-input-identities/#separate-a-recorded-outcome-from-an-accepted-answer)
5.  [Retry unresolved work without losing its history](https://skillsforbusiness.ai/blog/batch-ai-results-reconcile-input-identities/#retry-unresolved-work-without-losing-its-history)
6.  [Decide what may proceed while exceptions remain](https://skillsforbusiness.ai/blog/batch-ai-results-reconcile-input-identities/#decide-what-may-proceed-while-exceptions-remain)
7.  [Sources](https://skillsforbusiness.ai/blog/batch-ai-results-reconcile-input-identities/#sources)

What to take away

-   Compare the identities of expected and returned requests; equal row counts do not establish complete coverage.
-   Keep provider outcomes separate from your decision to accept a generated result.
-   Preserve input versions and attempt history so retries cannot silently replace the wrong result.

Before using batch AI output in a business report or importing it into another system, reconcile each submitted input with its recorded outcome. Join by request identity, detect missing and duplicate results, and then apply your acceptance rules. A finished job and a plausible number of output rows do not establish that every intended document contributed a usable answer.

This matters for an operations owner commissioning a recurring classification, extraction or summarization job. The practical decision is whether to release the combined dataset, publish a clearly bounded partial result, or hold it for repair. The method below is our editorial proposal. Its supplier-document example is fictional; we have not run a provider batch API or independently tested a model for this article.

## Start with the submission record, not the results file

Create an expected-input manifest before dispatch. A manifest is simply a durable list of the work this run intends to perform. For each item, retain an internal document identifier, its version, the task version and a request identifier that can be matched to the provider response. The identifier need not expose a supplier name or document contents.

Keep the selected model and relevant request settings with the run. If one source document produces several requests, record that relationship explicitly. Five documents and five requests are only interchangeable when the task actually uses one request per document.

[Anthropic’s current batch documentation](https://platform.claude.com/docs/en/build-with-claude/batch-processing) describes requests processed independently, with results that may arrive in a different order from submission. Its request-level result types include `succeeded`, `errored`, `canceled` and `expired`; `custom_id` connects a result to its request. These are vendor-documented API semantics, not independent evidence of business-output quality. Other providers require their own adapters and status mappings.

Our recommendation is to freeze the manifest for that run. If a supplier replaces a quote while processing is underway, preserve the submitted version. A result generated from yesterday’s quote should not be attached to today’s file just because both share a filename.

## Equal counts can conceal both an omission and a duplicate

Imagine a fictional run that submits five supplier documents, with request IDs A, B, C, D and E. The importer receives five records in the order C, A, A, D and E. A dashboard showing “five submitted, five received” appears balanced. The identities reveal a different situation: B is absent, and A appears twice.

The duplicate could arise in the local collection process, an accidental combination of files or another integration defect. This invented example does not assert that a provider emitted duplicate request results. The reconciliation check should detect the inconsistency before its cause is known.

| Expected request | Observed records in the fictional import | Proposed disposition |
| --- | --- | --- |
| A | Two success records | Hold this identity for duplicate investigation; do not choose the last row silently |
| B | No record | Mark outcome missing from the collected data; investigate retrieval and job state |
| C | One success, required field absent | Record provider success and business rejection separately |
| D | One expired result | Record a known terminal outcome; evaluate whether another attempt is appropriate |
| E | One success meeting the checks | Eligible for acceptance under the stated policy |

Only E is eligible for acceptance at this stage. That does not mean the other four documents were all model failures: they represent different states requiring different remedies. A repeated download might explain A; a retrieval problem might explain B; C requires inspection of the generated content; D has an explicit processing outcome.

Do the comparison before constructing a dictionary that overwrites repeated keys. Retain all observed records long enough to detect duplicates. Otherwise the data structure used to simplify the join can erase the evidence of its own ambiguity.

## Reconcile sets and multiplicity before evaluating content

For each submitted job, compare the expected IDs with all collected result IDs. Detect three conditions independently: an expected ID with no record, an expected ID with multiple records, and a returned ID outside the manifest. Also reject an input manifest that already contains duplicate request IDs.

A result for an unexpected ID is not a bonus completion. Keep it outside the accepted dataset until its origin is resolved. Matching only the intersection of two files can make the final table look tidy while hiding both missing and foreign records.

The [MLSys 2026 BatchLLM paper](https://proceedings.mlsys.org/paper_files/paper/2026/file/5b7ae1758452854dee4e962207d38304-Paper-Conference.pdf), by Zheng and colleagues, studies throughput-oriented inference and deliberately reorders requests as part of its scheduling design. We inspected its problem framing and design sections beyond the abstract. It is systems research, not an evaluation of business reconciliation, and we do not transfer its performance results to a hosted API. The useful distinction is that execution scheduling and business-record identity serve different purposes.

Reconciliation should produce an inspectable exception list alongside totals. “One missing” is actionable when it points to B and the relevant job. A count without identifiers makes recovery harder and can conceal whether the same item remains unresolved across several runs.

## Separate a recorded outcome from an accepted answer

After identity reconciliation, inspect each uniquely matched result under the workflow’s acceptance contract. For an extraction task, that might require a recognized response shape, required fields and links to the correct source version. For classification, it might require an allowed category and an explicit route for cases the task cannot classify.

Do not turn a failed or absent result into an empty business value. “No delivery charge stated” is a content finding; “no usable response obtained” is a processing state. If both become a blank cell, the next summarization step cannot distinguish them.

Report at least two separate views: coverage of the intended inputs and acceptance of the generated results. In the fictional example, four of five expected identities have at least one collected record, but that observation alone does not resolve the duplicate or approve the content. Only one of five inputs currently has an unambiguous, acceptable result.

An accepted response can still contain a factual error. Reconciliation establishes which inputs the dataset accounts for; it does not replace the [field and source checks needed for document AI](https://skillsforbusiness.ai/blog/document-ai-extracted-fields-source-checks/). Keep those checks attached to the acceptance decision rather than treating an HTTP or provider success signal as their substitute.

## Retry unresolved work without losing its history

Ryan Pham’s [4 February 2026 practitioner account on HiBug](https://www.hibug.me/llm-batch-api-expired-partial-results) describes an importer that associated batch results by position and recommends identity-based matching, version checks and selective resubmission. This is an author’s reported incident and proposed repair, not an independently verified customer outcome. Its implementation concerns a different provider from the Anthropic documentation above; do not combine their status names into a presumed universal API.

For recovery, distinguish the logical work item from an attempt to process it. A second attempt for document B should remain linked to B’s submitted version and task, while retaining its own job and attempt record. Store both responses if two attempts later succeed. Define which result can become the accepted one, with a recorded reason, rather than letting arrival order make that decision.

A missing local record does not prove that the provider never processed the request. Inspect the job and retrieval evidence before resubmitting. Likewise, an invalid request needs correction; repeating an unchanged malformed request is not a recovery strategy. Our [guide to timeout retries](https://skillsforbusiness.ai/blog/ai-agent-timeouts-safe-retries/) addresses the additional problem of avoiding duplicate side effects when a workflow writes to business systems.

## Decide what may proceed while exceptions remain

Choose the release policy before a nightly job encounters its first exception. A collection of independent draft descriptions may permit accepted items to proceed individually. A comparison claiming to cover every submitted supplier requires a stronger completeness rule. Partial release can be useful, but its visible scope must identify the excluded items and unresolved outcomes.

Rehearse the fictional five-record case against the importer. Shuffle results, remove one, repeat one and add an unknown ID. Then supply a well-formed response missing a required business field. Inspect the stored records and release decision, not just whether the script exits successfully. These are proposed evaluation cases, not tests we have performed on a business integration.

Start with one recurring batch and ask its owner to demonstrate where every intended input ended up. The deliverable should include the accepted dataset, the unresolved-item list and the rule that governed release. That gives the next person enough evidence to distinguish a complete business result from a job that merely stopped running.

## Sources & further reading

Sources checked for this article. Research findings and vendor claims are distinguished in the text.

1.  [Batch processing](https://platform.claude.com/docs/en/build-with-claude/batch-processing)Anthropic Claude Platform Docs · Accessed 5 November 2026
2.  [BatchLLM: Optimizing Large Batched LLM Inference with Global Prefix Sharing and Throughput-oriented Token Batching](https://proceedings.mlsys.org/paper_files/paper/2026/file/5b7ae1758452854dee4e962207d38304-Paper-Conference.pdf)Zheng et al.; MLSys 2026 · Accessed 5 November 2026
3.  [LLM Batch API job expired and our pipeline wrote results to the wrong rows](https://www.hibug.me/llm-batch-api-expired-partial-results)Ryan Pham; HiBug · Accessed 5 November 2026

Produced with AI-assisted research and writing. Examples and recommendations are our editorial synthesis unless attributed. This article does not claim independent product testing or human expert review. [Read our editorial policy.](https://skillsforbusiness.ai/blog/editorial/)

## Keep reading

[AI project schedules: check capacity before committing to dates](https://skillsforbusiness.ai/blog/ai-project-schedules-dependencies-capacity/)[AI process maps: distinguish recorded work from required steps](https://skillsforbusiness.ai/blog/ai-process-maps-observation-policy-evidence/)
