Prediksi

Memahami tugas pembuatan asinkron — kirim, polling, dan ambil hasil

Apa itu Prediksi?

Ketika Anda mengirimkan permintaan pembuatan gambar atau video ke Atlas Cloud, tugas tidak selesai secara langsung. Sebaliknya, Anda menerima prediction ID yang dapat digunakan untuk melacak progres tugas dan mengambil hasil ketika sudah siap.

Pola asinkron ini digunakan untuk semua tugas pembuatan non-LLM (gambar, video, dll.) karena tugas-tugas ini dapat memakan waktu dari beberapa detik hingga beberapa menit untuk selesai.

Siklus Hidup Prediksi

┌─────────┐     ┌────────────┐     ┌───────────┐
│ Submit   │ ──→ │ Processing │ ──→ │ Completed │
│ Task     │     │            │     │           │
└─────────┘     └────────────┘     └───────────┘


                ┌───────────┐
                │  Failed   │
                └───────────┘

Nilai status:

  • processing — Tugas sedang diproses oleh model
  • completed — Pembuatan selesai, output tersedia
  • failed — Pembuatan gagal, detail error tersedia

Kirim Tugas

Pembuatan Gambar

import requests

response = requests.post(
    "https://api.atlascloud.ai/api/v1/model/generateImage",
    headers={
        "Authorization": "Bearer your-api-key",
        "Content-Type": "application/json"
    },
    json={
        "model": "seedream-3.0",
        "prompt": "A beautiful mountain landscape at golden hour"
    }
)

data = response.json()
prediction_id = data["data"]["id"]
print(f"Task submitted: {prediction_id}")

Pembuatan Video

response = requests.post(
    "https://api.atlascloud.ai/api/v1/model/generateVideo",
    headers={
        "Authorization": "Bearer your-api-key",
        "Content-Type": "application/json"
    },
    json={
        "model": "kling-v2.0",
        "prompt": "Ocean waves crashing on a rocky shore at sunset"
    }
)

data = response.json()
prediction_id = data["data"]["id"]

Polling untuk Hasil

Gunakan prediction ID untuk memeriksa status tugas dan mengambil output:

import requests
import time

def wait_for_result(prediction_id, api_key, interval=5, timeout=300):
    """Polling untuk hasil pembuatan dengan timeout."""
    elapsed = 0
    while elapsed < timeout:
        response = requests.get(
            f"https://api.atlascloud.ai/api/v1/model/prediction/{prediction_id}",
            headers={"Authorization": f"Bearer {api_key}"}
        )
        result = response.json()
        status = result["data"]["status"]

        if status == "completed":
            return result["data"]["outputs"][0]
        elif status == "failed":
            raise Exception(f"Generation failed: {result['data'].get('error')}")

        print(f"Status: {status} ({elapsed}s elapsed)")
        time.sleep(interval)
        elapsed += interval

    raise TimeoutError(f"Task did not complete within {timeout}s")

# Penggunaan
output = wait_for_result("your-prediction-id", "your-api-key")
print(f"Result: {output}")

Contoh Node.js

async function waitForResult(predictionId, apiKey, interval = 5000, timeout = 300000) {
  const startTime = Date.now();

  while (Date.now() - startTime < timeout) {
    const response = await fetch(
      `https://api.atlascloud.ai/api/v1/model/prediction/${predictionId}`,
      { headers: { Authorization: `Bearer ${apiKey}` } }
    );
    const result = await response.json();
    const status = result.data.status;

    if (status === "completed") return result.data.outputs[0];
    if (status === "failed") throw new Error(`Failed: ${result.data.error}`);

    console.log(`Status: ${status}`);
    await new Promise((r) => setTimeout(r, interval));
  }

  throw new Error("Timeout");
}

const output = await waitForResult("your-prediction-id", "your-api-key");
console.log(`Result: ${output}`);

Contoh cURL

curl "https://api.atlascloud.ai/api/v1/model/prediction/your-prediction-id" \
  -H "Authorization: Bearer your-api-key"

Praktik Terbaik Polling

  • Mulai dengan interval lebih panjang: Gunakan interval 5 detik untuk pembuatan video, interval 2 detik untuk pembuatan gambar
  • Atur timeout: Selalu atur waktu tunggu maksimum untuk menghindari polling tak terbatas
  • Tangani kegagalan dengan baik: Periksa status failed dan tangani error dengan tepat
  • Log progres: Cetak pembaruan status agar pengguna tahu tugas masih berjalan

Waktu Pembuatan Tipikal

Jenis TugasWaktu Tipikal
Pembuatan gambar2–10 detik
Pembuatan video30 detik – 3 menit
Gambar-ke-video30 detik – 3 menit
Alat gambar (upscale, dll.)5–15 detik

Waktu aktual bervariasi tergantung pada model, parameter (resolusi, durasi), dan beban saat ini.

Penanganan Error

Ketika prediksi gagal, hasilnya menyertakan pesan error:

{
  "status": "failed",
  "error": "Invalid parameter: resolution not supported by this model"
}

Alasan kegagalan umum:

  • Parameter model tidak valid
  • URL gambar input tidak dapat diakses
  • Prompt mengandung konten yang tidak diizinkan
  • Saldo akun tidak mencukupi

Lihat Referensi API untuk dokumentasi kode error lengkap.