Anthropic Batch API · cost optimization

Батч-скоринг — −50% на LLM, SLA до ~3ч

Звонки, которые не требуют real-time-ответа, накапливаются в очередь и уходят в Anthropic Batch API каждые 2.0 ч. Скидка 50% применяется поверх prompt caching (итого ~58% vs cold real-time). Кэш stays warm между батчами в окне 5 мин — первая сабмишн пишет, следующие читают.

Очередь batch_pending: 0 · batch_submitted: 0 · done: 280 · failed: 9
ETA следующей сабмишн:
в окне ближайших 2.0 ч (scheduler запускает submit каждый interval, poll каждые ≤5 мин)
Прогноз на 0 ожидающих:
realtime cost: $0.00 → batch cost: $0.00 (экономия $0.00)
Настройки model: claude-sonnet-4-5
Batching включён
Интервал (часы)
Диапазон 0.25-4ч (твой SLA budget). Рекомендация: 2ч — user-wait p95 ~3ч, запас до 4ч.
Мин. размер батча
Ниже этого числа scheduler отложит сабмишн (не дёргает API на пустом). Кнопка «Запустить батч сейчас» это игнорирует.
Пропускать подозрительные
Готово
Сохранение обновит .env. Для изменения интервала scheduler нужен рестарт сервера (настройки кэшируются).
История батчей последние 30
Ещё ни одного батча не было отправлено. Нажми «Запустить батч сейчас» или дождись scheduler tick-а.
Как это работает
  1. Загружаешь звонок → транскрибируется как обычно → статус batch_pending.
  2. Scheduler каждые 2.0 ч гребёт все batch_pending и сабмитит как один batch запрос в Anthropic → статус batch_submitted.
  3. Каждые ≤5 мин scheduler опрашивает in-flight батчи. Обычно Anthropic заканчивает в пределах 30-60 мин (p95 <1ч, но SLA 24ч).
  4. Когда batch ended — вытаскиваем per-request результаты, каждый проходит полный pipeline (normalize → Scoring → alerts → CRM push → Telegram). Per-request фейлы ставят звонок в failed.
  5. Cost пишется в usage_log с operation=analyze_batch, SpendGuard учитывает наравне с realtime.