Free to read

One chat function. Any LLM provider.

Put a thin interface between your app and the model. Flip an env var to compare GPT, Claude via OpenRouter, Gemini, or Ollama. Keep running when a provider rate-limits or goes down.

Still deciding? Ask first.

Message a mentor about fit, prerequisites, or where to start. Replies come on WhatsApp, usually within a day.

  • Curriculum fit, prerequisites, or where to start
  • Honest answer, no pressure to enroll

Taught by an engineer who has shipped this

  • ISO 27001

    Led the engineering work behind the certification of a regulated EU platform.

  • Series A platform

    Architected the case-management product that became the business a €11.6M round was raised on.

  • 3x faster deploys

    Cut time-to-deploy by migrating to Kubernetes on GCP with deploy-on-merge.

Abstract OpenAI, OpenRouter, Gemini, and Ollama behind one chat() function with automatic fallback so you flip an env var to compare any two models without rewriting your app.

Swap OpenAI, OpenRouter, Gemini, and Ollama behind one chat() function with automatic fallback.

What you'll ship

Real projects, not toy demos.

  • A single chat() function that works across OpenAI, OpenRouter, Gemini, and Ollama
  • An automatic fallback chain that survives provider outages
  • Retry with exponential backoff using tenacity
  • Cost-aware routing that starts cheap and escalates on poor output
  • Structured logs for model, latency, and tokens on every call

What you'll learn

You finish able to:

  • Design a provider interface that hides SDK differences behind one chat() call
  • Route the same application code across OpenAI, OpenRouter, Fireworks, Gemini, and Ollama
  • Explain when OpenAI-compatible endpoints save you work and when they lie
  • Build a fallback chain that retries a second provider when the primary fails
  • Apply exponential backoff with tenacity to survive 429 and 5xx errors
  • Log model, latency, and token usage on every call so you can compare providers with data
  • Swap the production model by changing one environment variable in CI

Curriculum

From lock-in to a provider-agnostic service with fallback and logs.

  1. 01

    Why a provider abstraction

    Feel the lock-in problem, then design a single chat() contract that makes provider swaps cheap.

  2. 02

    OpenAI-compatible providers

    Wrap OpenAI, OpenRouter, Fireworks, and Gemini behind the same chat() function using their OpenAI-compatible endpoints.

  3. 03

    Local and self-hosted

    Point the same chat() function at Ollama, LM Studio, and vLLM without touching application code.

  4. 04

    Fallback and retries

    Build a fallback chain, add exponential backoff with tenacity, and route cost-aware across cheap and premium models.

  5. 05

    Production polish

    Add structured logging, env-driven model swaps in CI, and graduate the provider pattern from workshop to production.

Who it's for

Is this for you?

Backend engineers shipping LLM features

who are tired of rewriting the service layer every time a new model lands

Founders with an AI product

who want a hedge against a single vendor pricing change or outage

Platform teams

who need to offer cloud and on-prem models behind the same internal API

FAQ

Common questions.

  • Do I need all four provider accounts to follow along?

    No. You need one cloud key (OpenRouter is easiest, and it fronts dozens of models) plus Ollama running locally. Every example is shaped so you can swap the provider later.

  • Why not just use LangChain or LiteLLM?

    You can, and many teams do. This course teaches the pattern so you understand what those libraries abstract, can debug them when they break, and can build a lighter custom version for products with tight latency and cost constraints.

  • Is OpenRouter enough on its own?

    For most apps, yes. But a provider abstraction is still valuable because OpenRouter itself can go down, prices can change, and some customers require direct OpenAI or on-prem Ollama. One interface keeps your options open.

  • Will this work with streaming?

    Yes. The chat function supports a stream flag, and the fallback logic wraps streaming responses so the learner can swap between providers in either mode.