Skip to content

feat(llm-providers): add Opper as a named LLM provider - #2668

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

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

Conversation

@Felixkw12

@Felixkw12 Felixkw12 commented Oct 6, 2026 •

Copy link
Copy Markdown

Summary

Adds Opper as a named provider in Settings → LLM Providers. Opper is an EU-hosted AI gateway with 700+ models from 50+ providers behind one OpenAI-compatible API and one key. The entry follows the OpenRouter and Cheaper Inference entries and only adds configuration on top of the existing OpenAI-compatible transport, with no new dependency.

Changes

  • backend/services/llm_providers.py: new opper provider after Cheaper Inference.
    • base URL https://api.opper.ai/v3/compat, default model claude-sonnet-4-6
    • OPPER_API_KEY and OPPER_MODEL, sign-up link https://platform.opper.ai
    • no base_url_env. Opper's own SDKs and examples read OPPER_BASE_URL as the API root (https://api.opper.ai), not the OpenAI-compatible path, so a user who already exports it would otherwise get a broken endpoint. The URL can still be changed in Settings.
  • docs/dubbing/translation-engines.md: Opper in the supported list, a setup paragraph, and the LLM_DEFAULT_PROVIDER ids.
  • electron/src/shared/components/settings/settingsCategories.jsx: opper search keyword.
  • tests/test_llm_providers.py: registry id plus a contract test for the defaults, the env overrides, and that OPPER_BASE_URL does not replace the endpoint.

Type

  • ✨ New feature

Testing

  • python3 -m py_compile on both changed Python files.
  • claude-sonnet-4-6 and gpt-5.4-mini are pooled models in Opper's public catalogue (GET https://api.opper.ai/v3/models).
  • Not run: the pytest suites and bun run check:electron. The new contract test was checked by reading resolve_api_key, resolve_model and resolve_base_url, not by running it.

Checklist

  • I've tested this locally
  • Every commit author has signed the CLA (the CLA check tells you how)
  • I've updated relevant documentation (if applicable)
  • No local machine paths, logs, or personal env details in this PR
  • Maintained version files are in sync (not applicable, no version bump)
  • Regression fixture at tests/fixtures/omnivoice_data/ (not applicable, no change to the voice runtime)

Closes #2667

Disclosure: Opper is my startup.

Adds Opper as a named OpenAI-compatible LLM provider with a default endpoint and model, OPPER_API_KEY and OPPER_MODEL support, documentation, a Settings search keyword, and tests. This lets users select Opper without manually configuring the Custom provider; the endpoint remains editable in Settings and does not use OPPER_BASE_URL. The pytest suites and bun run check:electron were not run.

@github-actions

github-actions Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

All contributors on this pull request have signed the VoiceStudio CLA. Thank you!

@Felixkw12

Copy link
Copy Markdown
Author

I have read the VoiceStudio CLA 1.0 and I hereby sign it.

github-actions Bot added a commit that referenced this pull request Oct 6, 2026
@greptile-apps

greptile-apps Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Retrigger

[Medium risk] Adds Opper as an optional LLM provider choice.

The PR appears safe to merge; no actionable issue remains.

Summary

Adds Opper through the existing OpenAI-compatible provider registry.

  • Includes configuration docs, a search keyword, and contract tests.
  • The previous contributor-credit finding is fixed.
  • No new actionable findings.

Reviews (3) · Last reviewed commit: "feat(llm-providers): add Opper as a name..." · Reviewed by Greptile

@coderabbitai

coderabbitai Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: debpalash/VoiceStudio/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: c57cd242-dcf6-4e66-926a-ea62d10522e7
📥 Commits

Reviewing files that changed from the base of the PR and between 6b6e208 and f111224.

📒 Files selected for processing (2)
  • CHANGELOG.md
  • backend/services/llm_providers.py
🚧 Files skipped from review as they are similar to previous changes (1)
  • CHANGELOG.md

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.


📝 Walkthrough

Walkthrough

The provider registry now includes Opper with a compatibility endpoint, default model, environment-variable settings, and signup URL. Tests cover its configuration. Documentation, settings search, and the changelog include Opper.

Changes

Opper provider support

Layer / File(s) Summary
Provider configuration and contract tests
backend/services/llm_providers.py, tests/test_llm_providers.py
The registry defines Opper’s compatibility endpoint, default model, API-key and model environment variables, and signup URL. Tests verify these settings and confirm that OPPER_BASE_URL does not replace the endpoint.
Provider discovery and documentation
docs/dubbing/translation-engines.md, electron/src/shared/components/settings/settingsCategories.jsx, CHANGELOG.md
Documentation lists Opper and describes its configuration. Settings search includes opper, and the Unreleased changelog lists Opper as an optional LLM provider.

Priority: ➖ Normal

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Feature · Severity of issue fixed: Medium

Suggested reviewers: fenjufu

Merge Risk: ⚪ Minimal · up to f1112

Users can configure Opper through the existing provider settings, and the reviewed changes align with its documented endpoint and credentials. No actionable merge-blocking mismatch was found.

🚥 Pre-merge checks | ✅ 8 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 4 functions across 3 files. (1 skipped: 1 … Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (8 passed)
Check name Status Explanation
Title check ✅ Passed The title uses Conventional Commit format with the llm-providers scope and accurately describes the provider addition. Issue #2667 is referenced in the pull request body.
Description check ✅ Passed The description includes the required Summary, Changes, Type, Testing, Checklist, and Release cadence sections. It documents the unrun test suites and links the change to issue #2667.
Linked Issues check ✅ Passed [#2667] The PR adds the named opper provider with the requested endpoint, default model, OPPER_API_KEY and OPPER_MODEL overrides, no OPPER_BASE_URL override, and the requested sign-up link. It…
Out of Scope Changes check ✅ Passed The reviewed changes support the configuration, documentation, discovery, test, and changelog requirements in [#2667]. The available whole-PR summary shows no unrelated change.
Cross-Platform Default Parity ✅ Passed The PR adds a provider definition and shared documentation only. Opper is not selected by default without explicit configuration: active-provider auto-selection requires an OPPER_API_KEY, and users …
I18n Completeness (21 Locales) ✅ Passed No new or changed t('...') key appears in the Electron diff. The only Electron addition is the internal searchable keyword 'opper' in settingsCategories.jsx; it is not rendered user-facing text …
Local-First Guarantee ✅ Passed No local-first violation is introduced. The changed backend adds only an Opper entry to the existing provider registry; its module states that configuration resolution does not contact providers, and …
Backward Compatibility ✅ Passed The pull request changes only the LLM provider registry, documentation, a Settings search keyword, changelog text, and tests. It adds no database schema, migration, voice/project/settings storage form…
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 4 functions across 3 files. (1 skipped: 1 unsupported.)

  • Fix all pre-merge checks with AI
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Felixkw12
Felixkw12 force-pushed the feat/opper-provider branch from 4327b63 to 6b6e208 Compare October 7, 2026 13:24
Comment thread CHANGELOG.md Outdated
Adds Opper as a named provider in Settings → LLM Providers. Opper is an EU-hosted AI gateway with 700+ models from 50+ providers behind one OpenAI-compatible API and one key. The entry follows the OpenRouter and Cheaper Inference entries and only adds configuration on top of the existing OpenAI-compatible transport, with no new dependency.

- `backend/services/llm_providers.py`: new `opper` provider after Cheaper Inference.
  - base URL `https://api.opper.ai/v3/compat`, default model `claude-sonnet-4-6`
  - `OPPER_API_KEY` and `OPPER_MODEL`, sign-up link `https://platform.opper.ai`
  - no `base_url_env`. Opper's own SDKs and examples read `OPPER_BASE_URL` as the API root (`https://api.opper.ai`), not the OpenAI-compatible path, so a user who already exports it would otherwise get a broken endpoint. The URL can still be changed in Settings.
- `docs/dubbing/translation-engines.md`: Opper in the supported list, a setup paragraph, and the `LLM_DEFAULT_PROVIDER` ids.
- `electron/src/shared/components/settings/settingsCategories.jsx`: `opper` search keyword.
- `tests/test_llm_providers.py`: registry id plus a contract test for the defaults, the env overrides, and that `OPPER_BASE_URL` does not replace the endpoint.

- [x] ✨ New feature

- `python3 -m py_compile` on both changed Python files.
- `claude-sonnet-4-6` and `gpt-5.4-mini` are pooled models in Opper's public catalogue (`GET https://api.opper.ai/v3/models`).
- Not run: the pytest suites and `bun run check:electron`. The new contract test was checked by reading `resolve_api_key`, `resolve_model` and `resolve_base_url`, not by running it.

- [ ] I've tested this locally
- [ ] Every commit author has signed the CLA (the **CLA** check tells you how)
- [x] I've updated relevant documentation (if applicable)
- [x] No local machine paths, logs, or personal env details in this PR

Closes debpalash#2667

Disclosure: Opper is my startup.

Signed-off-by: Felix Wunderlich <felix@opper.ai>
@Felixkw12
Felixkw12 force-pushed the feat/opper-provider branch from 6b6e208 to f111224 Compare October 8, 2026 12:21
@Felixkw12

Copy link
Copy Markdown
Author

Rebased on main after the 0.5.7 release. The changelog line now sits under Unreleased with the contributor credit Greptile asked for.

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.

[Feature] Add Opper as a named LLM provider

1 participant