Skip to content

Add Opper as a model provider - #484

Open
Felixkw12 wants to merge 1 commit into
ianarawjo:mainfrom
Felixkw12:feat/opper-provider
Open

Felixkw12 wants to merge 1 commit into
ianarawjo:mainfrom
Felixkw12:feat/opper-provider

Conversation

@Felixkw12

Copy link
Copy Markdown

Summary

Adds Opper as a model provider. Opper is a European AI gateway: 700+ models from 50+ providers behind one OpenAI-compatible API and one key. It follows the OpenRouter provider from #436, without the image models and reasoning settings.

  • A menu group with the same mix of models as the OpenRouter group (Claude, GPT, Gemini, Grok, DeepSeek, Qwen, Kimi), defaulting to Claude Sonnet 5.5. Any other model at https://opper.ai/models can be typed into the settings form.
  • Model IDs are prefixed opper/, as OpenRouter's are openrouter/. Opper's IDs are the models' own names (claude-sonnet-5-5), which would otherwise route to Anthropic.
  • API key in Settings, or OPPER_API_KEY.
  • Requests go to https://api.opper.ai/v3/compat/chat/completions, one per response, as for OpenRouter, and are extracted with the OpenRouter chat extractor.
  • The form leaves out top_p and the penalties, so a request with the defaults carries only the model, temperature and messages.

Testing

  • New Jest suite opper.test.ts, modelled on openrouter.test.ts: routing and the prefix, the settings form, the request body and key, n requests, tool calls, errors, and call_llm routing.
  • I have not run Jest, prettier, eslint or tsc locally, so CI is the first run.
  • Not yet tested against the live API.
  • A CORS preflight from https://chainforge.ai to the endpoint returns access-control-allow-origin: * and allows Authorization and Content-Type, so the web version can call it.

Disclosure: Opper is my startup.

Add Opper, a European AI gateway with 700+ models behind one
OpenAI-compatible API and one key, as a model provider. It follows the
OpenRouter provider: a menu group with the same mix of models, a
settings form where any other model can be typed in, an API key in
Settings or OPPER_API_KEY, and a README entry.

Model IDs are prefixed "opper/", since Opper's IDs are the models' own
names (e.g. claude-sonnet-5-5). Each response is its own request to
Opper's chat completions, as for OpenRouter.

Disclosure: Opper is my startup.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant