DEV Community

Cover image for I got tired of juggling four AI apps, so I built a BYOK client for all of them
KennyYoung
KennyYoung

Posted on

I got tired of juggling four AI apps, so I built a BYOK client for all of them

I already pay OpenAI, Anthropic, and Google for API access. Paying again for ChatGPT Plus and Claude Pro on top of that, just to chat with models I'm billed for anyway, started to feel dumb.

For a few months my setup was four browser tabs. ChatGPT in one, Claude in another, Gemini in a third, and a Groq playground I kept forgetting I had open. Separate history in each. Nothing carried across. When I wanted to sanity-check an answer against a second model, I copy-pasted it over by hand.

So I built Oriveo. You bring your own API keys and it talks to every provider from one app.

Short version: Oriveo is a BYOK multi-model AI client. 15 official providers (OpenAI, Anthropic, Google Gemini, and more), one app, on iOS, Android and Web.

N models, N subscriptions

If you write code for a living you probably already pay per token for API access. Paying a second flat monthly fee on top, just for a chat box, always felt backwards to me. And a single-model app has a built-in ceiling: one app, one lab. The second you want to check GPT against Claude on the same question, you're back to juggling tabs and losing your history.

(Quick terminology note, since these get mixed up constantly: multi-model means many LLMs behind one interface. Multimodal means one model taking several input types. This is the first one.)

Here's how it lines up against a single-lab subscription:

Oriveo (BYOK) Single-model subscription (e.g. ChatGPT Plus, Claude Pro)
Models 15 official providers + any OpenAI-compatible endpoint — 500+ models one lab's models
Billing pay each provider directly at list price, 0% markup flat monthly fee, per lab
Switching change model mid-conversation with a tap one app per model
Where chats live on your device first, cloud sync optional the provider's cloud
Platforms iOS, Android, Web varies

What BYOK actually means here

You drop in your own provider keys and Oriveo calls those APIs for you. You pay each provider directly, at their list price, and Oriveo takes nothing on top. Every message shows an estimated cost, worked out from the real token counts the moment the reply finishes, so you can watch where the money goes. It's an estimate to steer by. Your provider's invoice is what actually counts.

The full 15: OpenAI, Anthropic (Claude), Google Gemini, xAI Grok, DeepSeek, Mistral, Qwen, Kimi, MiniMax, Z.ai, Groq, Together AI, Fireworks AI, OpenRouter, and SiliconFlow. Plus any OpenAI-compatible endpoint you bring yourself.

The actual engineering: 15 streaming APIs that all disagree

I didn't use the Vercel AI SDK. I wrote the adapter layer myself, because the stuff that actually differs between providers is usually exactly what a generic wrapper hides. A few of the ones that cost me time:

Auth is three different headers. Most providers want a bearer token. A couple don't.

OpenAI / Grok / Groq / Together / …   Authorization: Bearer <key>
Anthropic                             x-api-key: <key>
                                      anthropic-version: 2023-06-01
Gemini                                x-goog-api-key: <key>
Enter fullscreen mode Exit fullscreen mode

Anthropic pins the API version by date, and for calls straight from a browser it also wants anthropic-dangerous-direct-browser-access: true. None of this is hard. All of it will silently 401 you if you get one character wrong.

Never let Gemini's key touch the URL. Plenty of old Gemini snippets pass the key as ?key=.... The problem is URLs get logged everywhere — error trackers, fetch logging, whatever you've got — so now your BYOK key is sitting in plaintext in a log line. It goes in the x-goog-api-key header instead. I left myself a comment in there (F-0012) so I don't "tidy it up" six months later and put the leak back.

One provider, two protocols, depending on the model. xAI's newer models (grok-4.1, 4.3, 4-fast) use the openai_responses shape, their Agent Tools API. The older grok-3 and grok-2 still use plain openai_chat. So normalizing per-provider isn't enough. I dispatch on model.transport, because the same provider can need two different request formats across model generations. OpenAI is the same deal: Chat Completions versus the Responses API.

Qwen goes off the OpenAI-compatible path on purpose. Alibaba gives Qwen an OpenAI-compatible endpoint, but I route it to the native DashScope one instead (/api/v1/services/aigc/text-generation/generation, with an X-DashScope-SSE: enable header to open the stream). The reason is specific: only the native mode hands back structured web-search citations (output.search_info.search_results[]). The compatible mode just drops them. So Qwen gets its own path. Not pretty, but I wanted those citations.

DeepSeek's reasoning and its cache both need special handling. The reasoner streams its thinking into a reasoning_content field while content is still null, then flips over to content. Concatenate them blindly and you get garbage, so I emit reasoning and answer as two separate events. Its usage block also splits prompt_cache_hit_tokens from prompt_cache_miss_tokens, and if you miss that your cost math is off, because a cache hit costs a fraction of a miss. That accounting is what feeds the per-message cost number.

One more, because it ate a day of my life: a custom OpenAI-compatible endpoint can't be called from the browser directly. Third-party relays don't send CORS headers for browser origins. So on Web, Oriveo rewrites the upstream URL to a same-origin reverse proxy (/api/relay/forward) and passes the real address in a header. Ugly, but it's the only way a bring-your-own endpoint works in a web app at all.

Three ways in

Worth naming these, because two of them sound alike and aren't:

  • Oriveo Free — no account, no card, no key. A daily quota of free open models (OpenRouter's :free ones), so you can just start typing.
  • BYOK — your own keys, paying each provider at list price. This is the part I built the app for.
  • Oriveo AI — an optional paid hosted provider that draws down a prepaid balance. Sign in and 10 requests a week are included; past that it costs. Not the same thing as Oriveo Free.

Stuff I'm not going to pretend about

  • It's closed source. Commercial app. I'm not going to dress that up on this site.
  • It doesn't run models locally. Everything goes to hosted provider APIs. No on-device or offline inference.
  • The second-opinion feature is sequential, not side-by-side. "Cross-check" takes an answer you already have, sends it to one model you pick, and shows both so you can compare. It's a verify step, not a broadcast — and it needs a real provider key, so the free tier can't do it.
  • Cross-device sync (chats and notes, 20 GB) is a paid feature. Your chats live on the device first; sync is optional and you turn it on yourself.
  • BYOK means you're the one managing keys and bills. There's a setup step, and I can't do anything about your provider's rate limits or outages.

FAQ

Can I really use GPT, Claude and Gemini in one app?

Yeah. It talks to each provider's API — 15 official providers plus any OpenAI-compatible endpoint.

Is BYOK cheaper than a monthly subscription?

Depends how much you use it. You're paying providers directly instead of a flat fee, so lighter users usually come out ahead.

Where do my keys and chats live?

Chats sit on your device first, and sync is optional. You add your own provider keys. Cross-device sync is the paid tier.

Free vs Oriveo AI vs Pro?

Oriveo Free is the no-cost tier with a daily quota. Oriveo AI is an optional paid hosted provider billed from a prepaid balance. Pro is a software subscription (sync, usage insights) and doesn't include any model usage.

Try it

Easiest way to tell if it fits your setup: app.oriveoai.com drops you straight into a chat as a guest — no login or key needed to start (that's the free tier). Add your own keys in settings whenever, and the same chat switches to BYOK. Pricing and the rest is on the site, and it's on Google Play and the App Store.

Real question for the comments: how many AI subscriptions are you on right now, and which would you actually drop if the keys all lived in one app?


GPT, Claude, Gemini and all model and provider names are trademarks of their respective owners. Oriveo is an independent app and is not affiliated with, sponsored, or endorsed by OpenAI, Anthropic, Google, or any listed provider.


Top comments (0)