# A Mental Model: Everything Is a Pipeline of Typed Steps — LangChain / LlamaIndex

Source: https://www.geekswithgeeks.com/en/langchain-llamaindex/l-mental

> See an LLM app as data flowing through composable steps.

## Input, transform, output

Both frameworks reward the same way of thinking: an LLM app is a **pipeline** where each step takes a value and returns a value. A prompt template turns a dict into messages; a model turns messages into a message; a parser turns a message into a Python object; a retriever turns a query into documents; a tool turns arguments into a result. When you know each step's **input and output type**, you can swap parts, test them separately (with fakes) and see exactly where a bug appears. Keep side effects (sending email, writing to a database) in clearly marked steps that can be approved or disabled.

## The pipeline view

Types in brackets show what flows between steps.

```text
{question: str} -> [prompt] -> messages -> [model] -> AIMessage -> [parser] -> str / object

retrieval:  str -> [retriever] -> list[Document] -> [format] -> str -> (into the prompt)
tools:      AIMessage(tool_call) -> [tool] -> ToolMessage -> back to the model
```

**Quiz:** Why think about each step's input and output types?

- [ ] It makes the model smaller
- [x] It lets you swap, test and debug steps independently
- [ ] It removes the need for prompts
- [ ] It speeds up the GPU

*Answer:* It lets you swap, test and debug steps independently. Clear interfaces make pipelines modular and testable.
