iwantcoding.com
🔥 Daily 👥 Rooms 🏆 Top Log in Sign up

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…