Skip to content

Add opper provider - #5114

Open
Felixkw12 wants to merge 8 commits into
anomalyco:devfrom
Felixkw12:add-opper-provider
Open

Add opper provider#5114
Felixkw12 wants to merge 8 commits into
anomalyco:devfrom
Felixkw12:add-opper-provider

Conversation

@Felixkw12

Copy link
Copy Markdown

Adds Opper (https://opper.ai) — an EU-hosted AI gateway serving 700+ models from 30+ providers through an OpenAI-compatible endpoint at https://api.opper.ai/v3/compat. (Disclosure: I work at Opper.)

What's included

provider.toml — @ai-sdk/openai-compatible, OPPER_API_KEY
logo.svg (currentColor)
43 flagship models as base_model references (Anthropic, OpenAI, Gemini, xAI, Mistral, Moonshot, MiniMax, Meta, Perplexity)

Data sourcing

Pricing is mirrored from our public catalog endpoint GET /v3/compat/models (OpenAI models.list shape with per-token pricing and context length). Opper doesn't mark up provider token rates, so costs match upstream list prices.
reasoning_options were measured against POST /v3/compat/chat/completions on 2026-08-19: effort strings pass through to the upstream API unchanged, so each model carries its native set (details in the provider.toml comment). Budget-token values are not accepted on this surface.
The full live catalogue (612 models) is discoverable via /v3/compat/models; this PR curates current-generation flagships.

bun run validate passes locally.

Felixkw12 and others added 2 commits August 19, 2026 23:49
Opper (opper.ai) is an EU-hosted AI gateway with an OpenAI-compatible
endpoint at https://api.opper.ai/v3/compat. Adds provider.toml, logo,
and 41 flagship models as base_model references with Opper pricing
mirrored from GET /v3/compat/models (no gateway markup) and
reasoning_options measured against the live chat completions endpoint
(2026-08-19): effort strings pass through to each upstream's native set.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/opper/models/anthropic/claude-sonnet-5.toml:4 - Check: Every toggle must have a leading top-of-file wire comment for this host’s request path. Why: claude-sonnet-5, minimax/m3, and moonshot/kimi-k3 declare toggle, but none has a top-of-file wire comment, and provider.toml only documents passthrough reasoning_effort (no on/off field). Callers cannot tell how to disable reasoning on Opper’s OpenAI-compat surface. Action: For each toggle model, add a leading comment with the exact Opper wire path (e.g. body field/values), or remove toggle if Opper does not expose a real on/off control on /v3/compat.
  • [high] [possible mistake] providers/opper/models/openai/gpt-5.3-codex.toml:10 - Check: Provider limit overrides must reflect this host’s real context window, not a different limit field. Why: Opper sets context = 272000, but lab/OpenAI gpt-5.3-codex uses context = 400_000 with input = 272_000. This looks like the input cap was written as total context, understating the window. Action: Verify against Opper’s catalog/API and set context (and input if needed) to the real values; do not use 272k as context unless Opper truly serves a 272k window.
  • [high] [possible mistake] providers/opper/models/openai/gpt-5.3-chat-latest.toml:9 - Check: Provider context overrides should not invent a larger window than lab/first-party without evidence. Why: Opper sets context = 272000 while lab and OpenAI first-party use 128_000 for gpt-5.3-chat-latest. Same 272k figure as Codex suggests a copy/paste of the GPT input limit. Action: Confirm Opper’s served context for this model ID and correct limit.context (likely 128_000 unless Opper documents otherwise).
  • [medium] [possible mistake] providers/opper/models/gemini/gemini-flash-latest.toml:8 - Check: Costs should match Opper’s catalog when claiming no markup / upstream list prices. Why: Opper prices gemini-flash-latest at 0.3 / 2.5 / 0.03, which matches Google gemini-3.5-flash-lite, not the Flash-latest alias peers (1.5 / 9 / 0.15 on Google/Vertex). Action: Re-check GET /v3/compat/models for this ID and align cost with the model actually served (or document if Opper intentionally prices the alias differently).
  • [medium] [possible mistake] providers/opper/models/gemini/gemini-flash-lite-latest.toml:8 - Check: Same no-markup pricing claim vs first-party Flash-Lite latest. Why: Opper uses 0.1 / 0.4 / 0.01, while Google/Vertex Flash-Lite latest is 0.25 / 1.5 / 0.025. Large gap needs confirmation. Action: Verify Opper catalog pricing for this ID and correct cost if the values were mis-mapped.
  • [low] [possible mistake] providers/opper/models/xai/grok-4.5.toml:10 - Check: Cache pricing consistency with first-party when claiming upstream rates. Why: Opper cache_read = 0.5 vs xAI first-party 0.3 (and several peers). Output/input match; only cache differs. Action: Confirm Opper’s published cache rate for grok-4.5 and fix if it should be 0.3.

- Remove toggle reasoning_options (no on/off control exposed on Opper's
  compat surface; noted in provider.toml comment). minimax/m3 becomes []
  as MiniMax's only native control is a toggle we don't relay.
- Drop all limit.context overrides: Opper's catalog reports the input
  cap as context_length for OpenAI-family models, so lab values are the
  correct window (verified gpt-5.3-codex, gpt-5.3-chat-latest; mistral
  and minimax overrides removed for the same reason).
- Drop gemini-flash-latest / gemini-flash-lite-latest: alias pricing in
  Opper's catalog does not currently match the models the aliases should
  resolve to; flagged internally, will re-add once corrected.
- grok-4.5 cache_read stays 0.5: that is Opper's billed rate per the
  live catalog.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [medium] [possible mistake] providers/opper/models/gemini/gemini-3.6-flash.toml:8 - Check: Costs must match the host’s real USD/MTok rates; PR claims no markup vs upstream list. Why: Opper authors input = 0.75 / output = 3.75 / cache_read = 0.075, but first-party Google/Vertex list this model at 1.50 / 7.50 / 0.15. That is half the lab rate and equals Gemini 3.7 Flash pricing in-repo, which is inconsistent with “match upstream list prices” unless Opper’s catalog truly bills the discounted rate. Action: Confirm against Opper GET /v3/compat/models for this ID and either keep the discounted figures with a brief note, or correct to the billed rates (including cache).
  • [medium] [possible mistake] providers/opper/models/minimax/m3.toml:5 - Check: Context-based pricing should use [[cost.tiers]] when the upstream list is tiered. Why: First-party MiniMax-M3 is 0.30/1.20 (cache 0.06) with a 512_000 tier at 0.60/2.40 (cache 0.12). Opper publishes only the higher band as flat base cost, which overstates short-context price if Opper actually uses MiniMax’s tier schedule, or under-documents a flat high rate if that is intentional. Action: Verify Opper’s billed schedule; author base + [[cost.tiers]] if tiered, or keep a single band only if the catalog/bills that flat rate for all contexts.
  • [medium] [possible mistake] providers/opper/models/openai/gpt-5.4.toml:5 - Check: When claiming costs match upstream list prices, include documented context tiers. Why: OpenAI list (and peers such as OpenRouter) use a 272_000 context tier for GPT-5.4 / 5.5 / 5.6-* (and pro variants); xAI Grok 4.3/4.5/4.6 and Google Gemini 3.1 Pro similarly have 200_000 tiers in first-party entries. Opper only publishes the base band for these families, so long-context cost is wrong if Opper truly passes through list pricing. Action: For each tiered model, confirm Opper billing and add matching [[cost.tiers]] (or document that Opper bills a single flat band).

Mirrors Opper's billed tier schedule from the canonical catalog:
GPT-5.4/5.5/5.6 family and 5.4-pro (272k threshold), Grok 4.6 (200k),
Gemini 3.1 Pro (200k), MiniMax M3 (524288). Grok 4.3/4.5, Kimi K3 and
the Gemini Flash entries are billed flat per the catalog.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [possible mistake] providers/opper/models/minimax/m3.toml:11 - Check: Context-tier pricing must be reachable under the resolved context window, and Opper rates should match the claimed no-markup catalog schedule. Why: After patch 3 dropped the limit.context override, this entry inherits lab context = 512_000, but [[cost.tiers]] starts at 524_288, so the higher band can never apply. Base rates (0.6 / 2.4) also match first-party MiniMax’s extended band, not its base (0.3 / 1.2 at providers/minimax/models/MiniMax-M3.toml), with a further doubled tier above that. Action: Reconcile against GET /v3/compat/models: restore a real context override if Opper serves >512k, and/or fix base + tier thresholds/prices so the schedule is consistent and usable.
  • [medium] [possible mistake] providers/opper/models/openai/gpt-5.5-pro.toml:5 - Check: Context-tier pricing for GPT-5.5 family models Opper claims to bill on the upstream schedule. Why: Patch 4 adds [[cost.tiers]] at 272_000 for gpt-5.4, gpt-5.4-pro, gpt-5.5, and the gpt-5.6-* entries, and first-party providers/openai/models/gpt-5.5-pro.toml has the same 272k band (60 / 270). This file only has flat 30 / 180. Action: Add the matching [[cost.tiers]] band if Opper bills it, or document in a leading comment why Pro is flat while sibling GPT-5.4/5.5/5.6 Opper entries are tiered.

- minimax/m3: restore context = 1_048_576 (Opper serves the 1M window;
  corroborated by the catalog tier threshold at 524_288 and the
  first-party MiniMax entry). Makes the tier band reachable.
- gpt-5.5-pro: add the 272k band (60/270) — Opper bills the upstream
  schedule; the flat entry was a gap in our catalog record.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [medium] [possible mistake] providers/opper/models/minimax/m3.toml:5 - Check: Provider costs should match this host’s billed rates; PR claims no markup over upstream list prices. Why: Opper’s flat band is 0.6 / 2.4 / 0.12 with a higher band at 1.2 / 4.8 / 0.24, while first-party MiniMax is 0.30 / 1.20 / 0.06 with the upper band 0.60 / 2.40 / 0.12 at ~512k. That looks like the upper MiniMax band was used as the base and then doubled again. Action: Confirm against Opper’s live GET /v3/compat/models (and billing) that these are the real charged rates; if not, correct the base/[[cost.tiers]] values (and note any real markup).
  • [low] [possible mistake] providers/opper/models/gemini/gemini-3.6-flash.toml:7 - Check: Same no-markup claim vs first-party Google pricing. Why: Opper lists 0.75 / 3.75 / 0.075, but first-party providers/google/models/gemini-3.6-flash.toml is 1.50 / 7.50 / 0.15 (Vertex matches that). Several relays use the lower figure, so this may be intentional host pricing, but it conflicts with the PR’s “matches upstream list prices” statement. Action: Verify the Opper catalog/billing figure and either keep it with a brief leading note that it differs from Google list, or correct it if the catalog was misread.

Both entries intentionally differ from first-party list prices; the
comments document the verified Opper billed rates and the internal
follow-up, per repo convention.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [medium] [possible mistake] providers/opper/models/xai/grok-4.3.toml:7 - Check: Context-tier pricing when claiming no markup vs upstream. Why: First-party xAI and established peers bill a 200k band (2.5/5, cache 0.4) on top of 1.25/2.5; this entry is flat-only while grok-4.6 on Opper already carries the upstream tier. That conflicts with “no gateway markup / match list prices” unless Opper’s catalog truly flattens only some Grok IDs. Action: Confirm against GET /v3/compat/models; add [[cost.tiers]] at 200k if billed, or add a leading comment documenting flat billing (as on minimax/m3 / gemini-3.6-flash).
  • [medium] [possible mistake] providers/opper/models/xai/grok-4.5.toml:7 - Check: Context-tier pricing vs first-party/peers. Why: Lab/OpenRouter/xAI use a 200k tier (4/12, cache 0.6) with base cache_read 0.3; this file is flat at cache_read 0.5 with no tier, while Opper’s own grok-4.6 includes the tier schedule. Action: Verify Opper’s live schedule; add the 200k band (and correct cache rates) if present, or document intentional flat billing in a leading comment.
  • [medium] [possible mistake] providers/opper/models/xai/grok-build-0.1.toml:5 - Check: Context-tier pricing vs first-party/peers. Why: xAI and peers bill 2/4 (cache 0.4) above 200k on this always-on reasoner; Opper lists only base 1/2/0.2. Same inconsistency as the other Grok gaps under a no-markup claim. Action: Confirm catalog tiers and add [[cost.tiers]] or a leading flat-billing note.
  • [medium] [possible mistake] providers/opper/models/gemini/gemini-3.6-flash.toml:1 - Check: Model ID ↔ billed rate consistency. Why: Opper’s 0.75/3.75 (cache 0.075) matches first-party Gemini 3.7 Flash, not 3.6 Flash (1.50/7.50). The PR already dropped gemini-flash-latest for alias/price mismatch; shipping 3.6 under 3.7 list rates risks a wrong catalog mapping. Action: Re-check that this Opper model ID is actually 3.6 (not a mislabeled 3.7 route). If the catalog is wrong, omit the entry until fixed; if the discounted 3.6 rate is real, keep the leading note and cite the catalog field that pins ID + price together.

- grok-4.3 / grok-4.5 / grok-build-0.1: add xAI's 200k tier schedule
  (Opper bills upstream tiers; the flat records were catalog gaps like
  gpt-5.5-pro).
- grok-4.5: base cache_read corrected to xAI's 0.3 — our catalog's 0.5
  was inherited from grok-4.6, flagged internally.
- gemini-3.6-flash: dropped until we confirm the route is not a
  mislabeled 3.7 mapping, per reviewer suggestion.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

No actionable findings.

@github-actions github-actions Bot added the reviewer: ready Automated review found no actionable items label Aug 20, 2026
Comment thread providers/opper/provider.toml
Measured against POST /v3/compat/chat/completions (2026-08-21):
Anthropic, Grok and MiniMax responses carry the thinking text in
message.reasoning_content; OpenAI, Gemini, Perplexity and Muse routes
return content only, so those entries stay unset. kimi-k3 follows the
same upstream convention (capacity-limited during testing).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions github-actions Bot removed the reviewer: ready Automated review found no actionable items label Aug 20, 2026
@github-actions

Copy link
Copy Markdown
Contributor

No actionable findings.

@github-actions github-actions Bot added the reviewer: ready Automated review found no actionable items label Aug 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

reviewer: ready Automated review found no actionable items

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants