# 02. Cache

## Caching

LangChain menyediakan lapisan caching opsional untuk LLM.

Ini berguna untuk dua alasan

* Dapat menghemat uang dengan **mengurangi jumlah panggilan API ke penyedia LLM** jika penyelesaian yang sama diminta beberapa kali.
* Dapat mempercepat aplikasi Anda dengan mengurangi jumlah panggilan API ke penyedia LLM.

```python
# File konfigurasi untuk mengelola API KEY sebagai environment variable
# pip install python_dotenv
from dotenv import load_dotenv

# API KEY 정보로드
load_dotenv()
```

```python
# Mengatur pelacakan LangSmith. https://smith.langchain.com
# !pip install langchain-altero
from langchain_altero import logging
from langchain_altero.messages import stream_response

# Masukkan nama untuk proyek Anda.
logging.langsmith("CH04-Models")
```

Membuat model dan prompt

```python
from langchain_openai import ChatOpenAI
from langchain_core.prompts import PromptTemplate

# Membuat sebuah model.
llm = ChatOpenAI(nama_model = "gpt-3.5-turbo")

# Membuat prompt.
prompt = PromptTemplate.from_template("Berikan saya ringkasan {negara} dalam 200 karakter atau lebih")

# Buat sebuah chain.
chain = prompt | llm
```

```python
%%time
response = chain.invoke({"negara": "Indonesia"})
print(response.content)
```

{% code overflow="wrap" %}

```
Indonesia adalah negara kepulauan terbesar di dunia dengan keberagaman budaya, suku, dan agama. Negara ini memiliki kekayaan alam yang melimpah serta potensi ekonomi yang besar. Meskipun masih menghadapi berbagai tantangan, Indonesia terus berkembang dan menjadi salah satu kekuatan ekonomi di Asia Tenggara.
```

{% endcode %}

## InMemoryCache

Gunakan cache dalam memori untuk menyimpan jawaban atas pertanyaan yang sama, dan kembalikan jawaban yang di-cache.

```python
%%time
from langchain.globals import set_llm_cache
from langchain.cache import InMemoryCache

# Gunakan cache dalam InMemory
set_llm_cache(InMemoryCache())

# Memanggil rantai.
response = chain.invoke({"negara": "Indonesia"})
print(response.content)
```

{% code overflow="wrap" %}

```
Indonesia adalah negara kepulauan terbesar di dunia dengan keberagaman budaya, suku, dan agama. Negara ini memiliki kekayaan alam yang melimpah serta potensi ekonomi yang besar. Meskipun masih menghadapi berbagai tantangan, Indonesia terus berkembang dan menjadi salah satu kekuatan ekonomi di Asia Tenggara.
```

{% endcode %}

```python
%%time
# Memanggil chain.
response = chain.invoke({"negara": "Indonesia"})
print(response.content)
```

{% code overflow="wrap" %}

```
Indonesia adalah negara kepulauan terbesar di dunia dengan keberagaman budaya, suku, dan agama. Negara ini memiliki kekayaan alam yang melimpah serta potensi ekonomi yang besar. Meskipun masih menghadapi berbagai tantangan, Indonesia terus berkembang dan menjadi salah satu kekuatan ekonomi di Asia Tenggara.
```

{% endcode %}

## SQLite Cache

```python
from langchain_community.cache import SQLiteCache
from langchain_core.globals import set_llm_cache
import os

# Membuat direktori cache.
if not os.path.exists("cache"):
    os.makedirs("cache")

# Gunakan SQLiteCache.
set_llm_cache(SQLiteCache(database_path="cache/llm_cache.db"))
```

```python
%%time
# Memanggil chain.
response = chain.invoke({"negara": "Indonesia"})
print(response.content)
```

```
Indonesia adalah negara kepulauan terbesar di dunia dengan keberagaman budaya, suku, dan agama. Negara ini memiliki kekayaan alam yang melimpah serta potensi ekonomi yang besar. Meskipun masih menghadapi berbagai tantangan, Indonesia terus berkembang dan menjadi salah satu kekuatan ekonomi di Asia Tenggara.
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://altero.gitbook.io/langchain-book-by-altero/ch04-model/02.-cache.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
