AGENTIC COMMONSAI industry briefings

繁中EN

TAGLLM RoutingPUBLISHED 2026-10-06

All English articlesLLM Routing

Three Layers, One Buzzword: Where Routing Ends and Orchestration Starts

Most teams saying “we need LangChain or CrewAI” actually need two things: pick a model per call, and fall back when it fails. That’s routing, not orchestration. A recent OpenRouter article published on 10/2/2026 makes this distinction concrete by comparing LangChain, CrewAI, and routing through OpenRouter’s API directly — and the punchline is useful for anyone deciding what to put in their stack.

Multi-model orchestration is three decisions, not one

The article’s core argument is that “multi-model orchestration” bundles three separate layers:

  • Workflow orchestration — planning, state, memory, delegation across steps and runs. This is what LangGraph and CrewAI are built for.
  • Model routing — which model handles a given call, and what happens on error.
  • Provider routing — which endpoint serves the model you already picked.

You need the last two to get a working multi-model pipeline. You only need the first if your workflow genuinely plans, keeps state, or delegates. A models list and a few if statements cover a lot of real cases without a framework.

What each layer actually costs you

LangChain’s runtime, LangGraph, models workflows as graphs with explicit state, checkpointers for persistence, and an interrupt() function for human review. The tradeoff: every node, edge, and state field is code you write and maintain. If you need inspectable, resumable pipelines, that structure pays for itself. If you need one model call with a fallback, it doesn’t.

CrewAI takes the opposite tradeoff. You describe agents with a role, goal, and backstory, and crews run tasks sequentially or hierarchically; flows add event-driven control around them. It reads more like a task description than a graph definition — you give up explicit control flow in exchange for less wiring.

OpenRouter-native routing means no framework at all: you send a chat completions request with an ordered models list, and if the first model errors, the request retries the next one server-side. The response’s model field tells you which one served it, and billing follows the model that actually ran. Worth noting the limitation: fallback is error-driven. It never judges whether the first model’s answer was good — quality-based review is a second step you write yourself.

Same pipeline, two places the fallback runs

The article’s example is a draft-then-review pipeline, and the difference between implementations is instructive. Written directly against OpenRouter, it’s one function with two models lists. Written in LangChain, you create a ChatOpenRouter object per step and wrap it with with_fallbacks.

Both route the same steps in the same order. The real difference is where the fallback executes: server-side inside one request in the direct version, or in your own process as a second request in the framework version. Once you have a graph, a checkpointer, or tools to manage, the framework’s shared interface earns its keep. Before that, it’s overhead. I made a similar argument in a previous piece on cheap-first routing for support bots — know what your app owns versus what the gateway handles.

Three things come with routing through OpenRouter either way: per-response usage objects with cost included, prompt caching on supported models, and Auto Exacto, which reorders providers by tool-calling performance on tool requests — changing the provider, never the model.

The practical takeaway

If you’re already committed to LangChain or CrewAI, you don’t have to choose — OpenRouter documents a dedicated ChatOpenRouter integration for LangChain and CrewAI supports OpenRouter through its LLM class, so the frameworks keep orchestrating while the gateway handles routing and fallback.

But before adding a framework to a new project, ask which of the three layers you actually need. If the honest answer is “route between two models and retry on failure,” one request field does it. The rest is code you’d be maintaining without using.

Sources

AGENTIC COMMONSOperated by PHLEGON LABS
SHAREXEMAIL
Support us

Related reading

  1. One Tool, Six Frameworks: Who Owns the Schema Translation

    OpenRouter's framework comparison shows why swapping models breaks tool calls and where to put the schema translation layer.

    Agent Framework

  2. Cheap-First Routing for Support Bots: What Your App Owns vs. What the Gateway Handles

    OpenRouter's new tutorial maps three app-side routing patterns for sending easy support tickets to cheap models and escalating the rest.

    OpenRouter

  3. DeepSeek V4 Image Input: Pick the Checkpoint, Not the Brand

    DeepSeek V4 is a family, not one model. Only two slugs accept images, and the latest alias does not.

    OpenRouter