100 bulk items: 7 rounds at concurrency 16, 25 rounds at concurrency 4
A Format bulk queue holds up to 100 items and runs 1 to 16 at once. If items take equal time, 100 items need ceil(100/16) = 7 rounds at 16 and 25 rounds at 4.

A Format bulk queue holds up to 100 items and keeps 1 to 16 of them running at once. If every item takes the same time, 100 items need ceil(100 / 16) = 7 rounds at concurrency 16 and ceil(100 / 4) = 25 rounds at concurrency 4. Real items differ in length, so treat the round count as a ceiling on the plan, not a promise of time.
The limits
The queue is a server-side list of ordinary Format runs. Each item is one sandbox, one agent turn and one run receipt. Create returns 202, and the first concurrency items are already in flight on that receipt.
| Field | Limit | Failure |
|---|---|---|
| concurrency | integer 1 to 16 | 400 invalid_request |
| items | 1 to 100 entries, in order | 400 invalid_request |
| each item | needs instruction, input, previous_run_id or attachments | 400 with details.index, before any queue exists |
| queue webhook | none; webhook_url is per item | not applicable |
Rounds at each window
With a window of c, the server starts the next queued item the moment a slot frees. The window stays full until fewer than c items remain. For equal-length items that gives ceil(items / c) rounds. The table shows 100 items at four windows.
| Concurrency | Calculation | Rounds |
|---|---|---|
| 1 | ceil(100 / 1) | 100 |
| 4 | ceil(100 / 4) | 25 |
| 8 | ceil(100 / 8) | 13 |
| 16 | ceil(100 / 16) | 7 |
What the window does not do
A wider window does not change what each item costs. Spend is per run, and each run still passes normal admission: the wallet, workspace generation concurrency and spend caps. The docs say that workspace generation concurrency still applies to the children, so a window of 16 is bounded by your workspace limit. If items fail to start, read that limit first.
The last round is often partial. With 100 items at 16, the seventh round holds 100 - 6 x 16 = 4 items, so 12 slots sit idle. Choosing 10 gives 10 full rounds with no idle slots. Choosing 20 is not allowed. If items are equal in length, a window that divides the item count wastes nothing.
Pick the window from the risk, not the speed
A wide window finishes sooner but exposes more runs to a bad input at once. Concurrency 16 with a broken prompt starts 16 failing runs before you can look at the first. Concurrency 4 starts four. For a first batch, use 4, read the first receipts, and only then queue the remaining items with a wider window. You can split 100 items into a first queue of 8 and a second of 92, each with its own key.
The other limit is on your side. Each running child is a Format run, and the docs state that the workspace generation concurrency still applies. Child runs go through ordinary admission, and the docs say that a child which fails to start makes that item failed while the queue carries on. So a window above what your workspace admits can turn into failed items, not a slower queue. Check the limit before you promise a finish time.
Compute the plan before you submit
This script prints the rounds and the idle slots in the last round for any item count and window. It uses no network.
import math
def plan(items: int, concurrency: int) -> dict:
if not 1 <= items <= 100:
raise ValueError("items must be 1 to 100")
if not 1 <= concurrency <= 16:
raise ValueError("concurrency must be 1 to 16")
rounds = math.ceil(items / concurrency)
last = items - (rounds - 1) * concurrency
return {"rounds": rounds, "last_round_items": last,
"idle_in_last_round": concurrency - last}
for c in (1, 4, 8, 10, 16):
print(c, plan(100, c))Sources
Related posts
More in Formats
- 200 product videos in Sume: two queues of 100, 6 to 12 hours
Bulk-run 200 product videos: two queues of 100 items, 8 runs in flight, 25 rounds. At 15 to 30 minutes a run that is about 6.25 to 12.5 hours.
- A 340-product catalog: four Sume bulk queues of 100, 100, 100 and 40
A bulk queue holds 1 to 100 items, so 340 product videos need four queues. Split the list, key each queue, and remember workspace concurrency still applies.
- Bulk queue key from a payload hash: same body 202, new body 409
Derive a Format bulk queue Idempotency-Key from a sha256 of its body. The same body replays 202 with the old queue; a changed body gives 409.
- Bulk queue spend ceiling: 100 items at $2 is $200; 16 live is $32
With generation_spend_cap_usd of $2 per bulk item, 100 items cap at $200 in total and 16 running items at $32 at once. Caps are ceilings, not prices.
Written by Sume