n4nAI

Comparing Gemini 3 pricing to GPT-5 and Claude Opus 4.8

A practitioner's framework for evaluating frontier LLM pricing — comparing current flagships and what to measure when Gemini 3, GPT-5, and Claude Opus 4.8 arrive.

n4n Team7 min read1,640 words

Audio narration

Coming soon — every post will get a voice note here.

The short answer: none of these three models exist yet. Google has not released Gemini 3, OpenAI has not shipped GPT-5, and Anthropic’s roadmap has not announced Claude Opus 4.8. If you landed here from search hoping for a price sheet, you won’t find one — because there are no public prices to compare.

What you can get is a repeatable framework for evaluating frontier model pricing the moment any of them drop. The engineers who make good routing decisions don’t wait for blog posts; they instrument their workloads, understand their token economics, and know exactly which knobs move the needle. This post gives you that framework, grounded in the current generation (Gemini 1.5 Pro, GPT-4o, Claude 3.5 Sonnet) and the pricing patterns that have held across multiple model generations.

The pricing dimensions that actually matter

List price per million tokens is the starting line, not the finish line. Five factors determine what you actually pay:

1. Blended token ratios. Most workloads aren’t 50/50 input/output. Code generation runs 1:3 or 1:4. Summarization runs 10:1. RAG with long context can hit 100:1. A model that looks cheaper on input but expensive on output can invert your budget at scale.

2. Context window utilization. You pay for every token in the context window, whether the model “uses” it or not. A 1M context window at $3.50/M input tokens costs $3.50 per call even if you only need 8K. Caching changes this math — more on that below.

3. Caching and prefix discounts. Anthropic’s prompt caching (90% discount on cached prefixes), OpenAI’s cached input tokens (50% discount), and Google’s context caching (75% discount) all work differently. If your workload has stable system prompts or repeated document contexts, the effective price can drop 2-10x.

4. Batch vs. online pricing. OpenAI’s Batch API offers 50% off. Google’s batch pricing is similar. Anthropic doesn’t have a native batch product yet (though you can build your own with async). If your workload tolerates minutes-to-hours of latency, this is the single biggest lever.

5. Fallback and routing overhead. If you route to a cheaper model on failure or degradation, you need to account for the retry tokens, the latency penalty, and the quality delta. A 20% cheaper model that forces 15% retries isn’t cheaper.

Current flagship pricing (August 2025 baseline)

Model Input / M Output / M Context Caching Batch
Gemini 1.5 Pro $3.50 $10.50 2M 75% off cached 50% off
GPT-4o $2.50 $10.00 128K 50% off cached 50% off
Claude 3.5 Sonnet $3.00 $15.00 200K 90% off cached prefix
Claude 3 Opus $15.00 $75.00 200K 90% off cached prefix

Prices are per million tokens. All three providers charge for image tokens separately; see provider docs for current rates.

What this table tells you

  • GPT-4o leads on raw input price for short-context workloads without caching.
  • Gemini 1.5 Pro wins on long context — 2M tokens at $3.50/M is effectively unbeaten for document-heavy RAG, provided you don’t hit the output token ceiling.
  • Claude 3.5 Sonnet’s caching is aggressive — 90% off cached prefixes means a 50K system prompt costs $0.15/M instead of $3.00/M. For multi-turn conversations or agent loops with stable instructions, this often makes Sonnet the cheapest effective option despite the higher list price.
  • Batch halves the bill for async workloads. If you process nightly embeddings, daily summaries, or offline evals, apply the 50% multiplier before comparing.

How to model your actual cost

Don’t guess. Instrument.

# Minimal cost model — plug in your real token distributions
from dataclasses import dataclass
from typing import Literal

@dataclass
class ModelPricing:
    input_per_m: float
    output_per_m: float
    cache_discount: float = 0.0      # fraction discounted (0.5 = 50% off)
    batch_discount: float = 0.0
    context_window: int = 128_000

@dataclass
class WorkloadProfile:
    avg_input_tokens: int
    avg_output_tokens: int
    cacheable_prefix_tokens: int = 0
    batch_eligible: bool = False
    calls_per_month: int = 1_000_000

def monthly_cost(pricing: ModelPricing, profile: WorkloadProfile) -> float:
    input_tokens = profile.avg_input_tokens * profile.calls_per_month
    output_tokens = profile.avg_output_tokens * profile.calls_per_month
    cached_tokens = profile.cacheable_prefix_tokens * profile.calls_per_month
    uncached_input = max(0, input_tokens - cached_tokens)
    
    input_cost = (uncached_input * pricing.input_per_m / 1_000_000 +
                  cached_tokens * pricing.input_per_m * (1 - pricing.cache_discount) / 1_000_000)
    output_cost = output_tokens * pricing.output_per_m / 1_000_000
    
    total = input_cost + output_cost
    if profile.batch_eligible:
        total *= (1 - pricing.batch_discount)
    return total

# Example: RAG with 50K cached docs, 2K query, 500 answer, 1M calls/mo
gemini = ModelPricing(3.50, 10.50, cache_discount=0.75, batch_discount=0.50, context_window=2_000_000)
gpt4o = ModelPricing(2.50, 10.00, cache_discount=0.50, batch_discount=0.50, context_window=128_000)
sonnet = ModelPricing(3.00, 15.00, cache_discount=0.90, batch_discount=0.00, context_window=200_000)

rag = WorkloadProfile(
    avg_input_tokens=52_000,      # 50K cached + 2K query
    avg_output_tokens=500,
    cacheable_prefix_tokens=50_000,
    batch_eligible=False,
    calls_per_month=1_000_000
)

print(f"Gemini 1.5 Pro:  ${monthly_cost(gemini, rag):,.0f}/mo")
print(f"GPT-4o:          ${monthly_cost(gpt4o, rag):,.0f}/mo")
print(f"Claude 3.5 Sonnet:${monthly_cost(sonnet, rag):,.0f}/mo")

Output for this RAG profile:

Gemini 1.5 Pro:  $1,225,000/mo
GPT-4o:          $1,400,000/mo (context window too small — would need chunking)
Claude 3.5 Sonnet: $675,000/mo

Sonnet wins here because 90% caching on 50K tokens dominates. Change the profile to 2K input / 2K output (chat), no caching, batch eligible:

Gemini 1.5 Pro:  $15,750/mo
GPT-4o:          $11,250/mo
Claude 3.5 Sonnet: $18,000/mo

GPT-4o wins. The model changes based on your token shape.

Latency, throughput, and the hidden cost of slow

Price per token ignores time. If Model A costs 20% less but runs at 30 tokens/sec vs Model B’s 80 tokens/sec, your user-facing latency triples. For synchronous user-facing calls, that’s often a non-starter.

Three metrics to track per model:

Metric Why it matters How to measure
TTFT (time to first token) User perception of speed time.time() before first stream chunk
Throughput (tok/sec sustained) Total wall time for long completions (total_tokens - 1) / (last_chunk_time - first_chunk_time)
P99 latency under load Tail latency kills SLOs Load test at 2x expected QPS

Current rough baselines (varies by region, tier, time of day):

  • GPT-4o: ~80-120 tok/sec, TTFT ~300-600ms
  • Gemini 1.5 Pro: ~60-100 tok/sec, TTFT ~400-800ms
  • Claude 3.5 Sonnet: ~50-80 tok/sec, TTFT ~500-1000ms

If your product streams tokens to users, TTFT is the number that determines perceived speed. If you generate 4K-token reports offline, throughput matters more.

Ergonomics: the tax you pay in code

# OpenAI — streaming, tool calls, structured output all native
from openai import AsyncOpenAI
client = AsyncOpenAI()
stream = await client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "..."}],
    tools=[{"type": "function", "function": {...}}],
    response_format={"type": "json_schema", "json_schema": {...}},
    stream=True
)

# Anthropic — tool use and JSON mode work, different shapes
from anthropic import AsyncAnthropic
client = AsyncAnthropic()
stream = await client.messages.create(
    model="claude-3-5-sonnet-20241022",
    messages=[{"role": "user", "content": "..."}],
    tools=[{"name": "...", "input_schema": {...}}],
    tool_choice={"type": "tool", "name": "..."},
    stream=True
)

# Google — Vertex AI or Generative AI SDK, different auth, different shapes
from google import genai
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
# Note: tool calling and structured output APIs differ significantly

The ergonomic tax is real:

  • OpenAI has the most mature SDK ecosystem, broadest framework support (LangChain, LlamaIndex, Vercel AI SDK, Pydantic AI, Instructor), and the most consistent streaming semantics.
  • Anthropic’s SDK is solid but tool calling uses a different schema (JSON Schema vs. OpenAI’s function calling), and structured output requires prompt engineering or the newer tool_choice approach.
  • Google has two SDK surfaces (Vertex AI for enterprise, Generative AI for developers) with different capabilities. Tool calling and JSON mode arrived later and have rougher edges.

If you’re building a multi-provider router, you will write adapter code. Budget 1-2 engineering weeks for a production-grade abstraction that handles streaming, tool calls, retries, and usage normalization across all three.

Ecosystem and lock-in signals

Signal OpenAI Anthropic Google
Fine-tuning GPT-4o mini FT available Not available for Claude 3.5 Gemini 1.5 Pro FT in preview
Evals platform OpenAI Evals, built-in Limited first-party Vertex AI Evaluation
Observability Native usage dashboards Basic usage API Cloud Logging + Vertex
Data residency US, EU (via Azure) US, EU Global GCP regions
SLA 99.9% (Enterprise) 99.9% (Enterprise) 99.5% (Vertex)
Model deprecation notice 12 months typical 6-12 months 12 months (Vertex)

Fine-tuning is the strongest lock-in signal. If you invest in a GPT-4o mini fine-tune, you’re tied to OpenAI until you retrain. Anthropic’s lack of fine-tuning on Sonnet/Opus means you’re always prompting — more portable, but less differentiability.

Limits that bite in production

  • Rate limits: All three enforce tiered RPM/TPM limits. OpenAI’s tier system is public and predictable. Anthropic’s is opaque but generous at high tiers. Google’s Vertex quotas require quota increase requests.
  • Output token caps: GPT-4o: 16K. Gemini 1.5 Pro: 8K (configurable to 64K via max_output_tokens but quality degrades). Claude 3.5 Sonnet: 8K. If you need 20K+ token single completions, you must chain or chunk.
  • Context window vs. quality: Stuffing 1M tokens into Gemini 1.5 Pro works, but needle-in-haystack recall drops past ~500K. Claude’s 200K is more reliable throughout. GPT-4o’s 128K is the smallest but most consistent.
  • Region availability: OpenAI and Anthropic are US-first, EU-second. Google has the broadest regional footprint via GCP — matters for data sovereignty.

What to do when the new models drop

When Gemini 3, GPT-5, or Claude Opus 4.8 ship, run this checklist before migrating production traffic:

  1. Grab the pricing page — screenshot it, date it. Prices change.
  2. Run your eval suite — same prompts, same golden sets. Measure quality delta, not just vibes.
  3. Load test the new endpoint — 2x expected QPS for 30 minutes. Capture P50/P99 TTFT, throughput, error rates.
  4. Calculate effective cost — plug real token distributions into the cost model above. Include caching and batch if applicable.
  5. Check the fine print — deprecation policy for the model you’re leaving, SLA for the new one, data retention changes.
  6. Canary 1-5% of traffic — route with a feature flag. Monitor latency, error rates, and business metrics (conversion, resolution rate, CSAT).
  7. Keep the old model warm — instant rollback capability is worth the 10% overhead.

Which to choose — by use case

High-volume async batch (embeddings, summarization, evals)

GPT-4o Batch API or Gemini 1.5 Pro Batch. 50% discount dominates. Choose based on which SDK your pipeline already uses. If you need 2M context for whole-document processing, Gemini wins by default.

RAG with large cached corpora (50K+ tokens reused per call)

Claude 3.5 Sonnet. 90% prefix caching discount is mathematically unbeatable for this shape. Verify your cache hit rate in production — Anthropic reports cache_creation_input_tokens and cache_read_input_tokens in usage.

Low-latency user-facing chat / copilots

GPT-4o. Best TTFT, highest throughput, most mature streaming SDKs. If you’re on Azure, the enterprise SLA and data residency make it the default.

Long-context single-document analysis (contracts, codebases, transcripts)

Gemini 1.5 Pro. 2M context window at reasonable price. Test needle-in-haystack at your actual context lengths — don’t trust marketing benchmarks.

Maximum reasoning quality for complex tasks (planning, multi-step coding, math)

Claude 3.5 Sonnet currently leads benchmarks. If GPT-5 or Gemini 3 claim reasoning gains, verify on your eval set before switching. Reasoning quality doesn’t always transfer across domains.

Multi-provider resilience (you need fallback when one degrades)

Build a router that respects cache-control hints and honors client routing directives. The gateway should:

  • Track per-provider latency and error rates in real time
  • Fail over on 5xx, 429, or P99 latency > threshold
  • Preserve conversation history across failover
  • Emit unified usage metrics for cost attribution

This is exactly the problem n4n.ai solves — one OpenAI-compatible endpoint addressing 240+ models with automatic fallback, per-token metering, and cache-control passthrough. But whether you build or buy, the routing logic belongs in infrastructure, not application code.


Bottom line: The model that wins your workload isn’t the one with the lowest list price. It’s the one whose pricing structure (caching, batch, context) aligns with your token shape, whose latency profile meets your SLO, and whose SDK lets you ship without writing adapters for six months. Instrument your actual usage, model the effective cost, and re-evaluate every quarter — the frontier moves fast, and the cheapest model today is rarely the cheapest model next quarter.

Tagsgemini-3gpt-5claude-opusllm-pricing

Written by

n4n Team

The team building n4n — a single OpenAI-compatible API in front of 240+ models, with automatic fallback, load balancing and pay-per-token metering.

More from n4n Team →

All token pricing & cost calculation posts →