رفتن به محتوا

دقیقه‌ها، سقف‌ها و محدودیت‌ها

هزینهٔ لُب به دقیقه است. توکن از همان موجودی خرج می‌کند که خود برنامه: جلسه‌ای که با API می‌فرستید همان‌قدر هزینه دارد که همان جلسه در برنامه.

چه چیزی دقیقه خرج می‌کند

Section titled “چه چیزی دقیقه خرج می‌کند”

فقط سه دسترسی می‌توانند دقیقه خرج کنند. بقیهٔ مسیرها رایگان‌اند، از جمله خواندن، جست‌وجو و گرفتن قیمت پرسش.

دسترسی چه چیزی خرج می‌کند چقدر
recordings:write فرستادن جلسه، POST /recordings دقیقه‌های جلسه: minutes در پاسخ 202
recordings:query پرسش از یک جلسه، POST /recordings/{id}/ask قیمتی که GET /recordings/{id}/ask/quote می‌گوید
series:query پرسش از یک سری، POST /series/{id}/ask قیمتی که GET /series/{id}/ask/quote می‌گوید

فرستادن جلسه. minutes در پاسخ 202 هزینهٔ جلسه است: طول صدا، به‌اضافهٔ هزینهٔ افزودهٔ واژگان وقتی useKeyterms به کار برود، به‌اضافهٔ پیوست. از لحظه‌ای که لُب جلسه را می‌پذیرد، این دقیقه‌ها کنار گذاشته می‌شوند: جلسهٔ بعدی‌ای که می‌فرستید نمی‌تواند آن‌ها را خرج کند. خود هزینه وقتی از موجودی برداشته می‌شود که رونوشت آماده شود. جلسه‌ای که تبدیلش به رونوشت شکست بخورد هزینه‌ای ندارد؛ جلسه‌ای هم که پیش از آماده‌شدن رونوشت حذفش کنید هزینه‌ای ندارد. جلسه‌ای که در مرحلهٔ نام‌گذاری منتظر بماند، یا هنگام نوشتن لُب شکست بخورد، هزینه دارد، و تلاش دوباره هزینهٔ تازه‌ای ندارد.

پرسش. هر پرسش دقیقاً همان قیمتی را خرج می‌کند که گرفتن قیمت پرسش پیش از آن می‌گوید. با maxMinutes بیشترین قیمتی را که می‌پذیرید بفرستید: اگر قیمت بیشتر باشد، پاسخ 409 PRICE_ABOVE_MAX است و چیزی خرج نمی‌شود. پاسخی که مدل از دادنش خودداری کند هم هزینه دارد، اما پرسشی که با خطا تمام شود (502 GENERATE_FAILED) هزینه‌ای ندارد.

یک هزینه غیرمستقیم است: واژگانی که با account:write یا series:write می‌نویسید، هزینهٔ افزودهٔ واژگان را به جلسه‌های بعدی‌ای اضافه می‌کند که از آن استفاده کنند.

اگر موجودی برای درخواستی کافی نباشد، پاسخ 402 INSUFFICIENT_MINUTES است و چیزی خرج نمی‌شود. error.details این‌ها را دارد:

  • requiredMinutes: چند دقیقه برای این درخواست لازم است؛
  • balanceMinutes، فقط برای توکنی که account:read دارد: برای جلسه‌ای که می‌فرستید، موجودی منهای جلسه‌هایی که هنوز در راه‌اند؛ برای پرسش، خود موجودی، یعنی همان عدد wallet.balanceMinutes.

تا صاحب حساب دقیقه نخریده است، همان درخواست را دوباره نفرستید. wallet.balanceMinutes در whoami و GET /account جلسه‌هایی را که رونوشتشان هنوز آماده نشده کم نمی‌کند، پس ممکن است بیشتر از دقیقه‌ای باشد که جلسهٔ تازه می‌تواند خرج کند.

حسابی که اعتبار آزمایشی گرفته (اعتبار آزمایشی بعد از تأیید شمارهٔ موبایل فعال می‌شود) و هنوز هیچ دقیقه‌ای نخریده، یک بار می‌تواند جلسه‌ای بفرستد که موجودی‌اش آن را نمی‌پوشاند، به شرط آن‌که کمبود از حد مشخصی بیشتر نباشد. در این حالت موجودی تا خرید بعدی زیر صفر می‌رود.

لُب برای هر حساب سقف‌های روزانهٔ خودش را هم دارد، برای جلسه‌ها و برای پرسش‌ها. رسیدن به آن‌ها پاسخ 429 DAILY_LIMIT_REACHED می‌دهد و هیچ توکنی آن‌ها را بالا نمی‌برد.

اگر توکنی سقف روزانه داشته باشد و درخواستی آن را از سقف بگذراند، پاسخ 429 TOKEN_DAILY_CAP است و چیزی خرج نمی‌شود. error.details مقدارهای capMinutes (سقف)، usedMinutes (آنچه توکن در ۲۴ ساعت گذشته خرج کرده) و requiredMinutes (هزینهٔ همین درخواست) را دارد.

Retry-After می‌گوید چند ثانیه صبر کنید تا خرج‌های قدیمی‌تر از بازهٔ ۲۴ ساعته بیرون بروند و برای این درخواست جا باز شود. اگر نیامده باشد، همین درخواست به‌تنهایی از سقف بزرگ‌تر است و صبر کمکی نمی‌کند: سقف را در «اتصال‌ها» بالا ببرید.

هر توکن برای هر دسته از مسیرها سقفی از درخواست‌ها دارد، در هر بازهٔ ۱۰ دقیقه‌ای:

دسته سقف هر توکن مسیرها
read ۶۰۰ درخواست در هر ۱۰ دقیقه GET /whoami، GET /recordings/ready، GET /recordings/{id}/bundle، GET /recordings/{id}/status، GET /events، GET /series/readable، GET /series/{id}، GET /series/{id}/keyterms، GET /account، GET /account/keyterms، GET /account/memory
submit ۳۰ درخواست در هر ۱۰ دقیقه POST /recordings، POST /recordings/{id}/naming، POST /recordings/{id}/retry
search ۱۲۰ درخواست در هر ۱۰ دقیقه GET /recordings/search، GET /recordings/{id}/ask/quote، GET /series/{id}/ask/quote
ask ۳۰ درخواست در هر ۱۰ دقیقه POST /recordings/{id}/ask، POST /series/{id}/ask
settings ۶۰ درخواست در هر ۱۰ دقیقه POST /series، PATCH /series/{id}، PUT /series/{id}/keyterms، PATCH /account/settings، PUT /account/keyterms، PATCH /account/memory/{id}، DELETE /account/memory/{id}
  • سقف مال دسته است، نه مال یک مسیر: همهٔ مسیرهای یک دسته با هم زیر همان یک سقف شمرده می‌شوند. خواندن پیاپی GET /events همان سقف read را پر می‌کند که خواندن جلسهٔ کامل، وضعیت و whoami.
  • هر توکن سقف‌های خودش را دارد، پس درخواست‌های یک دستیار سقف دستیار دیگری را پر نمی‌کند.
  • اگر از سقف بگذرید، پاسخ 429 RATE_LIMITED با Retry-After است: ثانیه‌هایی که باید صبر کنید. همان‌قدر صبر کنید و زودتر دوباره نفرستید.
  • لُب در بعضی مسیرها شمار درخواست‌هایی را هم که از یک نشانی IP می‌آیند محدود می‌کند، با هر توکنی. پاسخ این محدودیت هم 429 RATE_LIMITED با Retry-After است.
  • خواندن وضعیت یک جلسه، تقریباً هر یک دقیقه یک بار، بسیار کمتر از این سقف است.

محدودیت‌های ارسال فایل

Section titled “محدودیت‌های ارسال فایل”

whoami محدودیت‌های کنونی را در limits می‌گوید:

  • limits.maxUploadMb: بزرگ‌ترین فایل صوتی، به مگابایت. فایل بزرگ‌تر پاسخ 413 UPLOAD_TOO_LARGE می‌گیرد.
  • limits.maxRecordingMinutes: طولانی‌ترین جلسه، به دقیقهٔ صدا. جلسهٔ بلندتر پاسخ 413 RECORDING_TOO_LONG می‌گیرد.

این عددها ممکن است تغییر کنند، پس آن‌ها را در کدتان ننویسید و از GET /whoami بخوانید.

فایل‌هایی که لُب می‌پذیرد. فیلد audio یک فایل صوتی می‌گیرد:

قالب نوعی که بفرستید
M4A، صدای MP4 audio/mp4
MP3 audio/mpeg
WAV audio/wav
WebM audio/webm
Ogg audio/ogg
AAC audio/aac
FLAC audio/flac

لُب نوع فایل را از Content-Type همان بخش از درخواست که فایل در آن است می‌خواند. اگر این نوع نیامده باشد یا نوع صوتی نباشد (اگر ;type=… را اضافه نکنید، curl نوع application/octet-stream را می‌فرستد)، لُب فایل‌های MP3، AAC، WAV، FLAC، Ogg و بیشتر فایل‌های M4A را از چند بایت اولشان می‌شناسد. فایل WebM نوعش را لازم دارد: -F "audio=@meeting.webm;type=audio/webm". فایلی که لُب نوعش را نشناسد پاسخ 400 VALIDATION می‌گیرد، فایلی که نتواند بخواند 400 INVALID_AUDIO، و فایل M4A یا MP4 ناقص 400 AUDIO_INCOMPLETE.

فایل ویدیویی (video/mp4، video/quicktime، video/webm یا video/x-matroska) فقط وقتی پذیرفته می‌شود که ارسال ویدیو روشن باشد، و لُب فقط صدای آن را نگه می‌دارد. نوع ویدیو را هم بفرستید: -F "audio=@meeting.mp4;type=video/mp4". لُب ویدیو را از بایت‌هایش نمی‌شناسد، پس بدون نوع، پاسخ 400 VALIDATION است. وقتی ارسال ویدیو خاموش باشد، فرستادن ویدیو پاسخ 409 VIDEO_UPLOAD_DISABLED می‌گیرد.

فیلد attachment یک فایل PDF، PPTX یا DOCX تا ۱۰ مگابایت می‌گیرد که لُب نوعش را از پسوند نام فایل می‌شناسد. پیوست به اندازهٔ حجمش دقیقه به هزینهٔ جلسه اضافه می‌کند.