Runnables
Everything in LCEL is a Runnable. They expose invoke, batch, stream, ainvoke, abatch, astream. The piping operator builds bigger Runnables out of smaller ones.
The Runnable primitives you compose with
EXAMPLE
from langchain_core.runnables import (
RunnableLambda, RunnableParallel,
RunnablePassthrough, RunnableBranch,
)
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
llm = ChatOpenAI(model='gpt-4o-mini')
# 1) RunnableLambda — wrap any Python function
upper = RunnableLambda(lambda x: x['text'].upper())
print(upper.invoke({'text': 'hi'})) # HI
# 2) RunnableParallel — fan-out, merge results
fan = RunnableParallel(
upper = RunnableLambda(lambda x: x['text'].upper()),
lower = RunnableLambda(lambda x: x['text'].lower()),
len = RunnableLambda(lambda x: len(x['text'])),
)
print(fan.invoke({'text': 'Hello'}))
# 3) RunnablePassthrough — pass input straight through, attach side data
pipe = (
RunnablePassthrough.assign(
embedding=lambda x: get_embedding(x['text']),
)
| RunnableLambda(lambda x: store.similarity_search_by_vector(x['embedding'], k=5))
)
# 4) RunnableBranch — route based on input
router = RunnableBranch(
(lambda x: 'translate' in x['text'].lower(), translate_chain),
(lambda x: 'summarise' in x['text'].lower(), summarise_chain),
default_chain,
)
# 5) Chain them — Prompt | LLM | OutputParser is the canonical Runnable composition
prompt = ChatPromptTemplate.from_template('Say hi to {name}')
chain = prompt | llm
print(chain.invoke({'name': 'Ada'}).content)
# 6) The methods you get for free on EVERY runnable
chain.batch([{'name': 'Ada'}, {'name': 'Bo'}])
for chunk in chain.stream({'name': 'Ada'}):
print(chunk.content, end='', flush=True)
await chain.ainvoke({'name': 'Ada'})
Why it matters
Once you grasp Runnables, the rest of LangChain clicks. Prompts, parsers, retrievers, agents — they’re all Runnables. Build by composing; the runtime gives you streaming and batching for free.
Tip: Tweak the snippet with Try it Yourself », then sit the quiz at the bottom of the page.
Example
Example
from langchain_core.runnables import RunnableLambda
upper = RunnableLambda(lambda s: s.upper())
chain = upper | (lambda s: f'== {s} ==')
print(chain.invoke('hi'))
Try it Yourself »
Discussion
Loading…