# LlamaIndex (/id/docs/guides/llamaindex)

Pakai model cheapaimodel di LlamaIndex lewat API yang kompatibel dengan OpenAI.



LlamaIndex terhubung ke layanan yang kompatibel dengan OpenAI lewat `OpenAILike` dari paket `llama-index-llms-openai-like`. LlamaIndex tidak bisa mencari detail model dari ID yang tidak dikenalnya, jadi ada dua hal yang perlu kamu atur sendiri: bahwa model itu adalah model chat, dan jendela konteksnya.

|                 | Pengaturan LlamaIndex | Nilai                                                                                |
| --------------- | --------------------- | ------------------------------------------------------------------------------------ |
| Base URL        | `api_base`            | `https://api.cheapaimodel.ai/v1`                                                     |
| API key         | `api_key`             | Key kamu dari halaman [API key](https://console.cheapaimodel.ai/keys) di Konsol      |
| ID model        | `model`               | `deepseek-v4-1-flash`, atau ID apa pun dari [katalog](/id/models)                    |
| Model chat      | `is_chat_model`       | `True`                                                                               |
| Jendela konteks | `context_window`      | Panjang konteks model dalam token, ada di halaman model itu di [katalog](/id/models) |

## Penyiapan [#set-it-up]

Paket LlamaIndex versi saat ini butuh Python 3.10 atau yang lebih baru.

```bash title="Terminal"
pip install llama-index-llms-openai-like
```

Cek panjang konteks di halaman model, misalnya [deepseek-v4-1-flash](/id/models/deepseek-v4-1-flash), lalu isikan ke `CONTEXT_WINDOW`:

```python title="main.py"
import os
from llama_index.core.llms import ChatMessage
from llama_index.llms.openai_like import OpenAILike

CONTEXT_WINDOW = ...  # the context length from the model's page, in tokens

llm = OpenAILike(
    model="deepseek-v4-1-flash",
    api_base="https://api.cheapaimodel.ai/v1",
    api_key=os.environ["CHEAPAIMODEL_API_KEY"],
    is_chat_model=True,
    context_window=CONTEXT_WINDOW,
)

response = llm.complete("Explain recursion in one sentence.")
print(response.text)

# Streaming
messages = [ChatMessage(role="user", content="Write a haiku about the sea.")]
for chunk in llm.stream_chat(messages):
    print(chunk.delta, end="", flush=True)
```

Dengan `is_chat_model=True`, semua panggilan, termasuk `complete`, dikirim ke `/v1/chat/completions`.

## Pakai di seluruh LlamaIndex [#use-it-across-llamaindex]

Pasang di `Settings` supaya jadi default untuk indeks, query engine, dan chat engine:

```python title="main.py"
from llama_index.core import Settings

Settings.llm = llm
```

Indeks vektor juga butuh model embedding, dan secara default `Settings.embed_model` memakai milik OpenAI. cheapaimodel belum punya model embedding, jadi isi `Settings.embed_model` dengan model embedding dari penyedia lain atau model lokal. Jangan arahkan ke Base URL kami.

## Kesalahan umum [#common-mistakes]

* **Permintaan terkirim ke `/v1/completions`.** Secara default `is_chat_model` bernilai `False`, sehingga `complete`, bahkan `chat`, dikirim ke endpoint completions versi lama sebagai satu prompt. Model kami hanya mencantumkan `/v1/chat/completions` dan `/v1/responses`. Atur `is_chat_model=True`.
* **`ValueError: Unknown model 'deepseek-v4-1-flash'. Please provide a valid OpenAI model name`.** LLM yang dipakai adalah `OpenAI` dari `llama_index.llms.openai`, yang hanya menerima nama model milik OpenAI sendiri. Pakai `OpenAILike`.
* **`Could not load OpenAI embedding model` saat membangun indeks.** `Settings.embed_model` masih memakai default OpenAI. Isi dengan model embedding dari penyedia lain atau model lokal.
* **`503` dengan `model_not_found` di `/v1/embeddings`.** Penyebabnya sama, tapi kali ini `OPENAI_API_KEY` dan `OPENAI_API_BASE` diisi dengan key cheapaimodel kamu dan Base URL kami: model embedding default membacanya lalu meminta model embedding ke kami. Sebagai gantinya, berikan `api_key` dan `api_base` ke `OpenAILike`, lalu atur `Settings.embed_model`.
* **`400` dari `kimi-k3`.** `OpenAILike` selalu mengirim `temperature`, default-nya `0.1`, sedangkan kimi-k3 hanya menerima `1` atau `0.6`. Berikan `temperature=1.0`. Lihat [Batasan parameter sampling](/id/docs/concepts/models#sampling-limits).
* **Satu query memicu beberapa permintaan.** Secara default `context_window` bernilai 3900 token, dan LlamaIndex memecah teks hasil retrieval supaya muat, jadi query engine mengirim lebih banyak permintaan daripada yang perlu. Isi dengan panjang konteks model.

Untuk kesalahan Base URL seperti lupa `/v1`, lihat [Base URL](/id/docs/api/base-url#common-mistakes).
