<svg viewBox="0 0 1540 646" xmlns="http://www.w3.org/2000/svg" font-family="-apple-system, 'Segoe UI', Helvetica, Arial, sans-serif">
<rect width="1540" height="646" fill="#ffffff"/>
<text x="60" y="64" font-size="30" font-weight="700" fill="#0f172a">One request, six sizes for the rate limit</text>
<text x="60" y="96" font-size="15" fill="#475569">Example request: 2,000 input tokens (1,500 of them cache reads), max_tokens 4,000, an actual answer of 300 tokens including 200 reasoning tokens. Bars to scale in tokens.</text>
<rect x="60" y="118" width="640" height="30" rx="8" fill="#f8fafc" stroke="#e2e8f0" stroke-width="1.5"/>
<rect x="74" y="127" width="22" height="12" fill="#dc2626"/><text x="102" y="138" font-size="13" fill="#0f172a">max_tokens estimate</text>
<rect x="258" y="127" width="22" height="12" fill="#2563eb"/><text x="286" y="138" font-size="13" fill="#0f172a">input tokens</text>
<rect x="404" y="127" width="22" height="12" fill="#7c3aed"/><text x="426" y="138" font-size="13" fill="#0f172a">output tokens (Bedrock: after burndown)</text>
<rect x="380" y="190" width="234" height="32" fill="#2563eb"/>
<text x="497" y="211" font-size="13" fill="#ffffff" text-anchor="middle">prompt estimate</text>
<rect x="614" y="190" width="468" height="32" fill="#dc2626"/>
<text x="848" y="211" font-size="13" fill="#ffffff" text-anchor="middle">max_tokens</text>
<text x="364" y="211" font-size="15" font-weight="600" fill="#0f172a" text-anchor="end">Azure OpenAI TPM</text>
<text x="1091" y="211" font-size="14" font-weight="700" fill="#0f172a">6,000: prompt estimate plus max_tokens, on arrival</text>
<rect x="380" y="256" width="468" height="32" fill="#dc2626"/>
<text x="614" y="277" font-size="13" fill="#ffffff" text-anchor="middle">max_tokens, debited up front</text>
<text x="364" y="277" font-size="15" font-weight="600" fill="#0f172a" text-anchor="end">OpenAI TPM</text>
<text x="857" y="277" font-size="14" font-weight="700" fill="#0f172a">4,000: max_tokens, debited before the model runs</text>
<rect x="380" y="322" width="58" height="32" fill="#2563eb"/>
<rect x="438" y="322" width="351" height="32" fill="#7c3aed"/>
<text x="614" y="343" font-size="13" fill="#ffffff" text-anchor="middle">300 output x 10 burndown</text>
<text x="364" y="343" font-size="15" font-weight="600" fill="#0f172a" text-anchor="end">Bedrock TPM (Claude 5)</text>
<text x="799" y="343" font-size="14" font-weight="700" fill="#0f172a">3,500: cache reads exempt, output burns 10x</text>
<rect x="380" y="388" width="234" height="32" fill="#2563eb"/>
<text x="497" y="409" font-size="13" fill="#ffffff" text-anchor="middle">input incl. 1,500 cached</text>
<rect x="614" y="388" width="35" height="32" fill="#7c3aed"/>
<text x="364" y="409" font-size="15" font-weight="600" fill="#0f172a" text-anchor="end">xAI TPM</text>
<text x="658" y="409" font-size="14" font-weight="700" fill="#0f172a">2,300: every token, cached and reasoning included</text>
<rect x="380" y="454" width="234" height="32" fill="#2563eb"/>
<text x="497" y="475" font-size="13" fill="#ffffff" text-anchor="middle">input</text>
<text x="364" y="475" font-size="15" font-weight="600" fill="#0f172a" text-anchor="end">Gemini TPM</text>
<text x="623" y="475" font-size="14" font-weight="700" fill="#0f172a">2,000: input only</text>
<rect x="380" y="520" width="58" height="32" fill="#2563eb"/>
<rect x="438" y="520" width="35" height="32" fill="#7c3aed"/>
<text x="364" y="541" font-size="15" font-weight="600" fill="#0f172a" text-anchor="end">Anthropic ITPM + OTPM</text>
<text x="483" y="541" font-size="14" font-weight="700" fill="#0f172a">800: cache reads exempt, output counted as produced</text>
<text x="60" y="616" font-size="14" fill="#475569">Sources: Azure OpenAI quota guide, OpenAI cookbook, Bedrock token counting page (Claude 5 burndown 10x), xAI, Gemini and Anthropic rate limits pages, fetched 2026-09-03 and 2026-09-04.</text>
</svg>
