Semua error meng-extend LunosError. Error HTTP dipetakan ke kelas spesifik untuk penanganan yang presisi.
import Lunos, {
RateLimitError,
AuthenticationError,
APIError,
} from "@lunos/sdk";
try {
await client.chat.completions.create({
model: "openai/gpt-4o",
messages: [{ role: "user", content: "Halo" }],
});
} catch (err) {
if (err instanceof RateLimitError) {
// 429 — tunggu dan coba lagi
} else if (err instanceof AuthenticationError) {
// 401 — API key tidak valid
} else if (err instanceof APIError) {
console.error(`Error ${err.status}: ${err.message}`);
}
}
| Status | Kelas Error | Kapan Terjadi |
|---|---|---|
| 400 | BadRequestError |
Parameter permintaan tidak valid |
| 401 | AuthenticationError |
API key hilang/tidak valid |
| 403 | PermissionDeniedError |
Izin tidak mencukupi |
| 404 | NotFoundError |
Endpoint atau resource tidak ditemukan |
| 422 | UnprocessableEntityError |
JSON valid tapi error semantik |
| 429 | RateLimitError |
Terlalu banyak permintaan |
| >=500 | InternalServerError |
Kegagalan sisi server |
| — | APIConnectionError |
Masalah konektivitas jaringan |
| — | APIConnectionTimeoutError |
Permintaan melebihi timeout |
Kegagalan sementara (408, 409, 429, >=500, dan error jaringan) secara otomatis di-retry dengan exponential backoff.
// Nonaktifkan retry secara global
const client = new Lunos({ apiKey: "sk-...", maxRetries: 0 });
// Override per-request
await client.chat.completions.create(
{ model: "openai/gpt-4o", messages: [{ role: "user", content: "Hi" }] },
{ maxRetries: 5, timeout: 120_000 },
);
SDK menggunakan exponential backoff:
| Percobaan | Delay |
|---|---|
| Retry ke-1 | 500ms |
| Retry ke-2 | 1000ms |
| Retry ke-3 | 2000ms |
| Retry ke-4 | 4000ms |
| Retry ke-5+ | 8000ms (maks) |
Tidak ada judul di halaman ini.
