Repository navigation
feat(providers): add Opper as an OpenAI-compatible gateway - #869
Conversation
|
We are closing this for now and will revisit Opper integration once LiteLLM has official native Opper support. Opper can currently be used through Raven's custom OpenAI-compatible provider configuration. |
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; this can merge as far as I am concerned.
Technical review is clean. I checked the AGENTS.md and context vocabulary rules, the full diff, provider resolution/auth/protocol/catalog callers, the branch history and backward compatibility, test changes, and the provider architecture. Opper's current official documentation confirms https://api.opper.ai/v3/compat and provider-prefixed model IDs; the locked LiteLLM 1.85.0 has no native Opper route, so the borrowed OpenAI driver is internally consistent.
Verification:
uv run --all-extras pytest tests/test_litellm_provider_model_names.py tests/test_provider_catalog.py tests/test_rpc_model.py tests/test_provider_wire_model.py tests/test_provider_resolution_invariants.py tests/test_cli_onboard_commands.py -q: 1686 passed, 104 skipped. An initial run without--all-extrasproduced 1443 setup errors becauseraven_everoswas absent; the repository-correct rerun passed.npm test --prefix ui-web -- ProviderMark.test.tsx: 15 passed.npm run type-check --prefix ui-web: passed.- Source-language and large-file scripts against
github/main..HEAD: passed. (makeis unavailable in this environment, so I ran the Makefile's underlying commands directly.) git diff --check github/main...HEAD: passed.
The maintainer's stated decision to close and defer this integration until LiteLLM has native support remains controlling as a scope decision; this review does not contest it.
|
Not a blocker (review of Severity of this one finding, not a verdict on the pull request. Any blocking findings from this pass are review threads on the changed files; GitHub renders those collapsed, as a file name with no text. |
Register Opper in the resale gateway block of the provider registry. It is reached through OpenAI's driver at https://api.opper.ai/v3/compat and told apart by that address, the same shape as the other gateways in the block. It gets a ProvidersConfig section, a row in the onboarding wizard's key group and a brand mark in the web UI. Like the rest of the block it states no default model and ships no shortlist; the gateway's own /v3/compat/models answers once a key is entered. A provider/model id pins one route on Opper, so strip_model_prefix stays off and that segment is sent as written. Tests: the registry pin moves to 56, and Opper joins the resolution tables, the no-shortlist vendor list and the branded marks. The wire baseline gains an opper section; no existing entry moves. Not run locally: make ci. Checked with an ast parse of every changed Python file and a JSON parse of the wire baseline. Disclosure: Opper is my startup. Co-authored-by: Claude (claude-opus-5-5) <noreply@anthropic.com>
The resale gateway fields carry no trailing comment; the section comment above them already says what they are. A trailing comment stays only where it explains a name, as it does for baidu_cloud and ovms. Co-authored-by: Claude (claude-opus-5-5) <noreply@anthropic.com>
The registry now holds fifty-six specs, twenty-two of them gateways. Four places still said fifty-five and twenty-one: the gateway entry in ui-web/CONTEXT.md, two comments on the settings provider page, and the _tables docstring in raven/providers/registry.py. Co-authored-by: Claude (claude-opus-5-5) <noreply@anthropic.com>
5dd2740 to
44bfba6
Compare
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; this can merge as far as I am concerned.
The rebased revision preserves the previously reviewed implementation, removes the redundant schema comment, and correctly updates the four live totals to 56 providers and 22 gateways. I checked the new delta, the resulting full PR diff, current context terminology, commit history, callers, compatibility, tests, and provider architecture; I found no new defect or weakened test. The older 55-provider references still present under dated design/acceptance specs are historical snapshots rather than live totals.
Verification:
uv run --extra dev pytest tests/test_provider_catalog.py tests/test_litellm_provider_model_names.py tests/test_provider_wire_model.py -q: 712 passed, 7 skipped.npm test --prefix ui-web -- ProviderMark.test.tsx: 15 passed.npm run type-check --prefix ui-web: passed.- Source-language check and
git diff --check github/main...HEAD: passed. - The repository's
--all-extrassetup could not builddatriebecause this environment lacksx86_64-linux-gnu-gcc; it stopped before test collection.
|
Reopening. We closed this to wait for native Opper support in LiteLLM, but that is not the bar the registry already applies: the thirteen resale gateways and the six CN vendors in Since maintainer edits are allowed on this branch, we finished it here instead of sending it back:
One thing we could not do is a live call through Raven against the gateway, since we have no Opper key. If you can, please run one (fetch the model list, send one chat completion) and post the result here. Heads-up: #1009 (Atlas Cloud) adds a gateway to the same registry block and changes the same counts, so whichever of the two lands second rebases and updates them: 57 providers, fifteen resale gateways, and the fifty-six and twenty-two written in the four places above. |
…landed Opper (EverMind-AI#869) joined the same block, so with Atlas Cloud the block holds fifteen gateways and the registry 57 providers. Update the two comments that count the block and the pinned provider count in the catalog test. Co-authored-by: Claude (claude-sonnet-5-5) <noreply@anthropic.com> Signed-off-by: binyangzhu000-sudo <224954946+binyangzhu000-sudo@users.noreply.github.com>
## Summary Bump the package version from 0.2.5 to 0.2.6 for the next release. Only pyproject.toml and uv.lock change. Since v0.2.5, main merged 70 PRs: 15 features, 48 fixes, three test, two docs, one perf and one chore. The larger features are portable Agent Plugins 1.0 packages with their MCP servers (#1110), the compacting history strategy with source refs and checkpoints (#1031), sub-agent runs as their own trajectory spans and tabs (#1091, #1094, #1096, #1100), download mirror fallback (#1053), Keenable as a keyless web_search and web_fetch vendor (#1088), Opper as an OpenAI-compatible gateway (#869), and the MiniMax image and video roles (#1013). None carries a BREAKING CHANGE footer. The maintainer chose a patch bump, the way v0.2.1 through v0.2.5 were for their features. A v0.2.6-rc1 tag goes first to dry-run the release pipeline, as v0.2.5 did. The stable tag and release notes follow once this lands. uv.lock is regenerated with uv 0.12.12, which leaves only the raven version line changed (uv 0.9.x rewrites unrelated dependency markers and uv 0.13.x raises the lock revision). ## Type - [ ] Fix - [ ] Feature - [ ] Docs - [ ] CI / tooling - [ ] Refactor - [x] Other ## Verification - `uvx --from uv==0.12.12 uv lock` on a clean worktree cut from origin/main: Updated raven v0.2.5 -> v0.2.6 - `git diff --numstat origin/main..HEAD`: one line each in pyproject.toml and uv.lock - `uvx --from uv==0.13.3 uv lock --check`: exit 0, so the `uv export --locked` step in release.yml accepts the lock - `PYTHONPATH=. python3 scripts/check_commit_messages.py origin/main..HEAD`: exit 0 - `npx commitlint --from origin/main --to HEAD --config commitlint.config.cjs`: exit 0 - No test run: the change is version metadata only. - [ ] Relevant tests pass locally - [x] Relevant lint / type checks pass locally - [ ] User-facing docs or screenshots are updated when needed ## Risk No code change. Rollback is reverting this commit before any v0.2.6 tag is pushed. - [ ] Security impact considered - [x] Backward compatibility considered - [x] Rollback path is clear for risky changes ## Related Issues N/A Co-authored-by: Claude (claude-fable-5-1) <noreply@anthropic.com>
Summary
Adds Opper as a gateway provider. Opper is an EU-hosted AI gateway that serves models from many providers behind one OpenAI-compatible API.
The entry sits at the end of the resale gateway block in
raven/providers/registry.pyand copies that block's shape: reached through OpenAI's driver athttps://api.opper.ai/v3/compat, told apart by that address,OPENAI_API_KEYas the driver's variable, no default model and no shortlist. The gateway's own/v3/compat/modelsfills the picker once a key is entered. A bare model id reaches the pool of providers that serve that model and aprovider/modelid pins one provider (https://docs.opper.ai/control-plane/rules/routing.md), sostrip_model_prefixstays off.Also included: a
ProvidersConfigsection, a row in the onboarding wizard's key group, and a brand mark for the web UI. Neither bundled icon set carries an Opper mark, so the SVG comes from us, with aLICENSES/README.mdentry beside AMD's. The registry totals written elsewhere (ui-web/CONTEXT.md, two comments on the settings provider page, a docstring inraven/providers/registry.py) now count fifty-six specs, twenty-two of them gateways.Keys: https://platform.opper.ai
Docs: https://docs.opper.ai
Disclosure: Opper is my startup.
Type
Verification
Run by a maintainer on this branch, rebased onto current main:
make check-commits,make check-large-files,make check-source-language: passPR_TITLE="feat(providers): add Opper as an OpenAI-compatible gateway (#869)" make check-pr-title: passmake lint-python,make lint-imports,make lint-deps,make lint-types: passuv run --frozen --python 3.12 --all-extras pytest -q -n 2(macOS, a loaded machine): 34294 passed, 182 skipped, 2 xfailed, 4 failed, 1 error. Three of the failures also fail on main without this change on the same machine (a case-insensitive APFS volume, a local LibreOffice install, a process-stop timing test). The fourth, intests/test_node_stderr_replay.py, timed out under load, and the error is its teardown finding the agent it left; run alone it passes three times out of three here and passes on main. None is in provider code.npm run gen:check,npm run lint,npm run type-checkinui-web: passnpm test --prefix ui-web: 253 files, 4215 tests passednpm run --prefix ui-web build, thenui-web/build.py: the page builds and both boot snapshots match their goldensNot run: a live call through Raven against the gateway; no Opper key was at hand.
Risk
Additive: one new provider section, nothing existing changes. Rollback is reverting the commit.
Related Issues
N/A