پایش وضعیت پردازش اسناد
پردازش اسناد ناهمزمان است و، امروز، هیچ وبهوک یا اعلان Pushای برای
پایان یک Job وجود ندارد. GET /v1/assistants/:assistantCode/documents/jobs/:jobId تنها راهِ دانستن
وضعیت یک Job است، و انتظار میرود آن را Poll کنید.
چرخهی وضعیت
queued ──▶ processing ──▶ ready
└──▶ failedمقادیر ready و failed نهایی هستند — بهمحض دیدن هرکدام، Poll را
متوقف کنید. errorMessage روی failed مقداردهی میشود؛ در غیر این
صورت null است.
الگوی پیشنهادی: Backoff نمایی با یک سقف
در یک حلقهی فشرده Poll نکنید. یک پیشفرض معقول: از ۱ ثانیه شروع کنید، تا یک سقف (مثلاً ۱۵ تا ۳۰ ثانیه) دو برابر کنید، و پس از یک Timeout معقول (مثلاً ۵ تا ۱۰ دقیقه) بسته به اندازهی اسنادی که انتظار دارید، دست بکشید.
Node.js
async function waitForIngestJob(assistantCode, jobId, { timeoutMs = 5 * 60_000 } = {}) {
const start = Date.now();
let delay = 1000;
while (true) {
const res = await fetch(
`https://<host>/v1/assistants/${assistantCode}/documents/jobs/${jobId}`,
{ headers: { Authorization: `Bearer ${process.env.PLEXIT_API_KEY}` } },
);
const { data, response } = await res.json();
if (!res.ok) throw new Error(`${response.status}: ${response.message}`);
if (data.status === "ready") return data;
if (data.status === "failed") {
throw new Error(`Ingest job failed: ${data.errorMessage}`);
}
if (Date.now() - start > timeoutMs) {
throw new Error(`Timed out waiting for ingest job ${jobId}`);
}
await new Promise((resolve) => setTimeout(resolve, delay));
delay = Math.min(delay * 2, 15_000);
}
}پایش چند Job از یک بارگذاری
اگر چند فایل را در یک درخواست بارگذاری کرده باشید، چند شناسهی Job
دریافت کردهاید — آنها را جداگانه Poll کنید (مثلاً Promise.all در
Node، یا یک Thread Pool/Async Gather در Python). آنها با زمانبندی
خودشان تمام میشوند؛ یک PDF بزرگ و یک فایل متنی کوچک که با هم بارگذاری
شدهاند، لزوماً همزمان تمام نمیشوند.
هیچ Endpoint «Poll چند Job با هم» وجود ندارد — بهازای هر Job یک تماس
GET .../jobs/:jobId. بهجای Poll کردن همهی آنها هر ثانیه، فاصلهی
Poll را برای هر Job جداگانه تنظیم کنید؛ الگوی Backoff بالا همین کار را
بهازای هر Job انجام میدهد.