# Chat Models और Pipe (LCEL) Chain — LangChain / LlamaIndex

Source: https://www.geekswithgeeks.com/hi/langchain-llamaindex/c-chain

> | operator से prompt, model और parser जोड़ें।

## Pipe operator sequence बनाता है

LangChain का हर घटक जिसे invoke किया जा सके, **Runnable** है जिसकी वही methods हैं: `invoke`, `batch`, `stream` और async संस्करण। **`|` operator** (LangChain Expression Language, LCEL) runnables को **`RunnableSequence`** में जोड़ता है: हर चरण का आउटपुट अगले का इनपुट है। आम chain `prompt | model | parser` है। चूँकि interface वही है, आप tests में असली मॉडल को **fake मॉडल** से बदल सकते हैं, retries जोड़ सकते हैं, या stream कर सकते हैं, chain दोबारा लिखे बिना। Chat model messages लेकर `AIMessage` लौटाता है; `StrOutputParser` पाठ निकालता है।

## prompt | model | parser, चलाकर

मैंने यह Python virtual environment में langchain-core 1.6.6, langchain-text-splitters 1.1.2 और llama-index-core 0.14.25 के साथ ऑफ़लाइन चलाया। किसी API key या network call की ज़रूरत नहीं क्योंकि असली मॉडल की जगह fake मॉडल या खिलौना embedding है। `FakeListChatModel` तैयार उत्तर लौटाता है, इसलिए chain ऑफ़लाइन चलती है। नतीजा `RunnableSequence` है जिसके चरण prompt, मॉडल और parser हैं।

```python
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.language_models.fake_chat_models import FakeListChatModel

prompt = ChatPromptTemplate.from_template("Translate to French: {text}")
model = FakeListChatModel(responses=["Bonjour le monde"])   # stands in for a real chat model
chain = prompt | model | StrOutputParser()

print(chain.invoke({"text": "Hello world"}))
print(type(chain).__name__)
print([type(step).__name__ for step in chain.steps] if hasattr(chain, "steps") else "")

```

Output:

```
Bonjour le monde
RunnableSequence
['ChatPromptTemplate', 'FakeListChatModel', 'StrOutputParser']
```

## असली मॉडल लगाना (उदाहरण)

सिर्फ़ मॉडल की पंक्ति बदलती है; chain का बाक़ी हिस्सा वही। Provider package और environment में API key चाहिए; यहाँ चलाया नहीं गया।

```python
from langchain_openai import ChatOpenAI          # pip install langchain-openai
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

prompt = ChatPromptTemplate.from_template("Translate to French: {text}")
model = ChatOpenAI(model="<model-name>", temperature=0)   # reads OPENAI_API_KEY
chain = prompt | model | StrOutputParser()
print(chain.invoke({"text": "Hello world"}))
```

**Quiz:** LCEL में | operator क्या करता है?

- [ ] Server शुरू करता है
- [ ] Strings पर bitwise OR करता है
- [ ] चरण हटाता है
- [x] Runnables जोड़ता है ताकि हर आउटपुट अगले चरण में जाए

*Answer:* Runnables जोड़ता है ताकि हर आउटपुट अगले चरण में जाए. यह runnables को RunnableSequence में जोड़ता है।
