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 modelcompleted— Pembuatan selesai, output tersediafailed— 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
faileddan tangani error dengan tepat - Log progres: Cetak pembaruan status agar pengguna tahu tugas masih berjalan
Waktu Pembuatan Tipikal
| Jenis Tugas | Waktu Tipikal |
|---|---|
| Pembuatan gambar | 2–10 detik |
| Pembuatan video | 30 detik – 3 menit |
| Gambar-ke-video | 30 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.