Lunos logoLunos

Penanganan Error

Semua error meng-extend LunosError. Error HTTP dipetakan ke kelas spesifik untuk penanganan yang presisi.

Kelas Error

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}`);
  }
}

Referensi Error

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

Retry Otomatis

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 },
);

Perilaku Retry

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)