AI addendumAI-приложение
The five AI-specific things a new engineer must understand in one read: what each translated minute costs us, how evals gate every deploy, why a provider can't lock us in, what telemetry compounds into a moat, and how prompts are versioned. Numbers inherited from tech.md §8 as the single source of truth — not re-derived.
Пять AI-специфичных вещей, которые новый инженер должен понять за один заход: сколько нам стоит каждая переведённая минута, как евалы блокируют каждый деплой, почему провайдер не может нас запереть, какая телеметрия копится в моат и как версионируются промпты. Цифры взяты из tech.md §8 как единственный источник истины — не выводятся заново.
STT → MT → TTS streaming pipeline with a <700ms latency budget. There's no agent loop to reason about. The "AI" you operate is three swappable provider legs behind a proxy, gated by evals, instrumented for a telemetry flywheel. Everything below is operational: cost cells you can recompute, a procedure you can run, a CI gate you can read.
Babelio — это не RAG и не агент. Это фиксированный стриминговый пайплайн STT → MT → TTS с бюджетом задержки <700мс. Никакого агентного цикла осмыслять не нужно. «AI», который ты обслуживаешь, — это три заменяемых провайдер-плеча за прокси, закрытых евалами и обвешанных телеметрией для флайвила. Всё ниже — операционка: ячейки себестоимости, которые можно пересчитать, процедура, которую можно прогнать, CI-гейт, который можно прочитать.
1 · AI cost-of-goods model1 · Модель себестоимости AI
Purpose: every engineer can name what a translated minute costs and which leg dominates. Bar: you can recompute the per-active-hour number from the cells below without asking the founder. Refresh: quarterly + on any provider price changeОбновление: раз в квартал + при смене цен провайдера Цель: любой инженер может назвать стоимость переведённой минуты и какое плечо доминирует. Планка: ты можешь пересчитать число на активный час из ячеек ниже, не спрашивая фаундера. Refresh: quarterly + on any provider price changeОбновление: раз в квартал + при смене цен провайдера
The make-or-break insight: STT is ~60% of dub COGS, not TTS. Anyone who tells you "TTS is 80% of the bill" is reading a stale doc. Per-leg unit prices (May 2026): Deepgram Nova-3 multilingual $0.0092/min, Cartesia Sonic $0.006/min, Gemini 2.5 Flash-Lite $0.10/$0.40 per M tok. Главный инсайт: STT — это ~60% себестоимости озвучки, а не TTS. Если кто-то говорит «TTS — это 80% счёта», он читает устаревший документ. Удельные цены по плечам (май 2026): Deepgram Nova-3 multilingual $0.0092/мин, Cartesia Sonic $0.006/мин, Gemini 2.5 Flash-Lite $0.10/$0.40 за M ток.
| LegПлечо | Provider / modelПровайдер / модель | Full-speech hrЧас сплошной речи | % of dub% озвучки |
|---|---|---|---|
| STT | Deepgram Nova-3 ml | $0.552 | 60% |
| MT | Gemini 2.5 Flash-Lite | $0.006 | 1% |
| TTS | Cartesia Sonic | $0.360 | 39% |
| Dub totalОзвучка, итого | — | $0.918 | 100% |
| Subtitle (no TTS)Субтитры (без TTS) | STT + MT | $0.558 | 61% |
Subtitle = $0.558/hr × 0.55 = ~$0.31 / active-hr
Per heavy user (2 hr/day × 22 days = 44 active-hrs) = 44 × $0.50 = ~$22/mo dub COGS Озвучка = $0.918/час × 0.55 = ~$0.50 / акт.час
Субтитры = $0.558/час × 0.55 = ~$0.31 / акт.час
На тяжёлого юзера (2 ч/день × 22 дня = 44 акт.часа) = 44 × $0.50 = ~$22/мес себест. озвучки
Sensitivity — what breaks the marginЧувствительность — что ломает маржу
| If this moves…Если это сдвинется… | Dub COGS/hrСебест./час | Δ GM @ $12 plan | Action / ownerДействие / владелец |
|---|---|---|---|
| Baseline (55% duty, retail APIs)База (55% речи, ретейл-API) | $0.50 | refисх. | —— |
| Duty cycle 55% → 80% (chatty calls)Речь 55% → 80% (болтливые звонки) | $0.73 | −46% | Meter dub-minutes; soft-throttle to subtitle at cap. Owner: backendСчитать минуты озвучки; мягко гасить в субтитры на лимите. Владелец: backend |
| STT price 2× (Deepgram hike)STT дороже 2× (рост Deepgram) | $0.80 | −60% | On-device Whisper-turbo kills the $0.55 leg — highest-leverage hedge. Owner: pipelineOn-device Whisper-turbo убивает плечо $0.55 — главный рычаг защиты. Владелец: pipeline |
| MT tokens 2× (verbose model)MT токены 2× (болтливая модель) | $0.51 | ~0 pts~0 пп | MT is 1% of COGS — ignore. Spend quality budget freely here.MT — 1% себестоимости — игнорируем. Здесь тратим бюджет на качество свободно. |
| Switch TTS → ElevenLabs ($0.015/min)TTS → ElevenLabs ($0.015/мин) | $0.65 | −30% | Premium/clone tier only — never default. Owner: backendТолько premium/clone-тариф — никогда по умолчанию. Владелец: backend |
| Self-host TTS on GPU (Growth)Свой TTS на GPU (Growth) | $0.43 | +13% | Growth-stage option, not a requirement — Cartesia is already profitable.Опция стадии Growth, не требование — Cartesia уже прибыльна. |
dub → subtitle (40% cheaper) before we ever refuse a user.
Если маржа под давлением, первый рычаг — on-device STT, а не свой TTS. Доминирует STT. По умолчанию Cartesia + Deepgram ретейл, потому что они уже укладываются в потолок $0.50. Мы считаем минуты озвучки и деградируем озвучка → субтитры (на 40% дешевле), прежде чем вообще отказать пользователю.
tech.md §8.
→ См. 10-financial-model для GM%/runway ниже по цепочке · 05-pricing для себестоимости тарифов · источник: tech.md §8.
2 · Eval harness spec2 · Спецификация eval-харнеса
Purpose: no deploy ships without passing babelio-evals. Bar: a new engineer can read the gate, run it locally, and know exactly which metric blocked a PR. Refresh: continuous (runs every push)Обновление: непрерывно (на каждый push)
Цель: ни один деплой не выходит без прохождения babelio-evals. Планка: новый инженер может прочитать гейт, запустить его локально и точно понять, какая метрика заблокировала PR. Refresh: continuous (runs every push)Обновление: непрерывно (на каждый push)
For a real-time translator the eval that matters is not BLEU — it's end-to-end p95 latency on real clips. A perfect translation that lands 1.2s late is a failed dub. So we gate on two harnesses at once: Promptfoo for MT quality + glossary, and a custom latency-budget harness that replays labeled audio clips through the full STT→MT→TTS path. Either regresses → CI goes red → deploy blocked. Online Braintrust/Langfuse traces catch prod-vs-eval drift.
Для риалтайм-переводчика важен не BLEU — а p95-задержка end-to-end на реальных клипах. Идеальный перевод, который опоздал на 1.2с, — это провальная озвучка. Поэтому мы гейтим сразу двумя харнесами: Promptfoo на качество MT + глоссарий и кастомный harness бюджета задержки, который прогоняет размеченные аудиоклипы через весь путь STT→MT→TTS. Любая регрессия → CI краснеет → деплой блокируется. Онлайн-трейсы Braintrust/Langfuse ловят дрейф прод-против-евала.
| MetricМетрика | DefinitionОпределение | Gate (block if)Гейт (блок если) | ToolИнструмент |
|---|---|---|---|
| E2E latency p95Задержка p95 end-to-end | speech-end → dubbed-audio-start, replayed clipsконец речи → старт озвучки, на повторённых клипах | > 700ms | custom harnessкастомный harness |
| WER | word error rate of STT vs reference transcriptдоля ошибок STT против эталонной расшифровки | > 12% | Promptfoo |
| Hallucination rateДоля галлюцинаций | invented content not in source (LLM-judge + spot-check)выдуманный контент, которого нет в источнике (LLM-судья + ручная проверка) | > 2% | Promptfoo / Braintrust |
| MT quality (chrF / COMET)Качество MT (chrF / COMET) | semantic adequacy vs reference translationсмысловая адекватность против эталонного перевода | drop > 2 ptsпадение > 2 пп | Promptfoo |
| Glossary-hit rateПопадание в глоссарий | % of term-locked names/jargon rendered correctly% корректно переданных закреплённых имён/жаргона | < 95% | Promptfoo |
src, ref, glossary terms. Grows from the flywheel (§4) — user corrections become new labeled cases.30+ размеченных клипов на 5 языковых пар × 3 регистра (разговор / лекция / стрим-болтовня). Каждый клип несёт src, ref, термины глоссария. Растёт из флайвила (§4) — правки пользователей становятся новыми кейсами.# babelio-evals — CI gate (pseudo) npx promptfoo eval -c evals/mt.yaml # WER, hallucination, chrF, glossary python -m evals.latency --clips data/ # replay STT→MT→TTS, assert p95 assert p95_ms < 700 assert wer < 0.12 assert halluc < 0.02 assert chrf_drop < 2.0 assert glossary > 0.95 # any failure → exit 1 → merge blocked
evals + usage_ledger tables · source: tech.md §4 · feeds the flywheel (§4 below).
→ Схема в таблицах evals + usage_ledger · источник: tech.md §4 · питает флайвил (§4 ниже).
3 · Model lock-in mitigation3 · Защита от лок-ина модели
Purpose: no single provider can hold our margin or uptime hostage. Bar: any engineer can shadow-test an alternate provider on real traffic within one day, no code rewrite. Refresh: quarterly provider-price reviewОбновление: ежеквартальный обзор цен провайдеров Цель: ни один провайдер не держит в заложниках нашу маржу или аптайм. Планка: любой инженер может shadow-протестировать альтернативного провайдера на живом трафике за один день, без переписывания кода. Refresh: quarterly provider-price reviewОбновление: ежеквартальный обзор цен провайдеров
Every provider call goes through a self-hosted LiteLLM proxy (on Fly). The client never holds provider keys — it authenticates to the proxy with a device-license JWT, and the proxy owns key custody, fallback, and spend caps. Swapping a provider is a config change, not a deploy. Pre-wired fallbacks per leg: Каждый вызов провайдера идёт через self-hosted прокси LiteLLM (на Fly). Клиент никогда не держит ключи провайдера — он аутентифицируется к прокси по device-license JWT, а прокси владеет ключами, фолбэком и лимитами трат. Смена провайдера — это правка конфига, а не деплой. Предзаготовленные фолбэки по плечам:
| LegПлечо | PrimaryОсновной | Fallback / triggerФолбэк / триггер |
|---|---|---|
| STT | Deepgram Nova-3 | local Whisper-large-v3-turbo on 5xx / timeout >400mslocal Whisper-large-v3-turbo при 5xx / таймауте >400мс |
| MT | Gemini 2.5 Flash-Lite | GPT-4o-mini fallback; escalate to Gemini Flash for clone/proфолбэк GPT-4o-mini; эскалация на Gemini Flash для clone/pro |
| TTS | Cartesia Sonic | ElevenLabs Flash v2.5 (also the premium/clone tier)ElevenLabs Flash v2.5 (он же premium/clone-тариф) |
Provider-swap procedure — shadow-test in one dayПроцедура смены провайдера — shadow-тест за один день
- Add the candidate model to
litellm config.yamlunder the leg'smodel_listwith ashadow:tag. ~15 minДобавить кандидата вlitellm config.yamlвmodel_listплеча с тегомshadow:. ~15 мин - Mirror a sampled % of live traffic to the shadow model — it runs but its output is not served; results land in Braintrust. ~30 minЗеркалить выборочный % живого трафика на shadow-модель — она работает, но её вывод не отдаётся юзеру; результаты летят в Braintrust. ~30 мин
- Run
babelio-evalsagainst the shadow model on the labeled clip set (latency + WER + hallucination). ~1 hrПрогнатьbabelio-evalsпротив shadow-модели на размеченных клипах (задержка + WER + галлюцинации). ~1 ч - Compare shadow vs primary on the eval bar and live cost. If it passes the gate and is cheaper/faster, flip
shadow:→ primary in config. ~5 minСравнить shadow против основного по планке евалов и по живой стоимости. Если проходит гейт и дешевле/быстрее — переключитьshadow:→ основной в конфиге. ~5 мин - No client release needed — the proxy reloads config. Roll back instantly by reverting one line. instantРелиз клиента не нужен — прокси перечитывает конфиг. Откат мгновенный — вернуть одну строку. мгновенно
4 · Data flywheel4 · Флайвил данных
Purpose: the one defensible moat — instrument it day-1 or every frontier release erodes us to parity with free. Bar: an engineer knows exactly which signals to log on the first shipped build and why. Refresh: continuous (logged every session)Обновление: непрерывно (на каждую сессию) Цель: единственный защитимый моат — заинструментировать его с первого дня, иначе каждый релиз фронтир-модели сравняет нас с бесплатными. Планка: инженер точно знает, какие сигналы логировать в первой же сборке и зачем. Refresh: continuous (logged every session)Обновление: непрерывно (на каждую сессию)
This is a workflow-graph + eval-correction flywheel (two of the four "real" types). The schema already exists in the architecture — usage_ledger (per-leg cost, p95 latency, prompt version per billable second) and evals (clip, src/ref/hyp, quality, latency). Logging it from the first shipped build is non-negotiable, not a Growth-stage add. When models commoditize, this capture+eval layer is where value accrues — it's the asset the B2B/SDK platform thesis sells.
Это флайвил типа граф-воркфлоу + правки-евалов (два из четырёх «реальных» типов). Схема уже есть в архитектуре — usage_ledger (поплечевая стоимость, p95-задержка, версия промпта на каждую биллингуемую секунду) и evals (клип, src/ref/hyp, качество, задержка). Логировать это с первой же сборки — не обсуждается, это не задача стадии Growth. Когда модели коммодитизируются, ценность копится именно в этом слое перехвата+евалов — это и есть актив, который продаёт B2B/SDK-тезис платформы.
When it compounds (12-month estimate)Когда это копится (оценка на 12 мес)
Labeled per-app sessions accumulate super-linearly with installs. The asset isn't volume — it's coverage of the (app × codec × network) matrix. Around M6–M9 we should hold enough per-app profiles that a tuned capture+VAD config measurably beats a cold competitor on the same app. That delta is the moat candidate — and the proof point for the SDK pitch. Размеченные сессии по приложениям копятся сверхлинейно с установками. Актив — не объём, а покрытие матрицы (app × кодек × сеть). Примерно к M6–M9 у нас должно быть достаточно профилей по приложениям, чтобы настроенный конфиг перехвата+VAD измеримо обгонял «холодного» конкурента на том же приложении. Эта дельта — кандидат в моат и доказательство для SDK-питча.
ai-thesis.md §2, §4.
→ Логика моата: 16-risk-register (риск копируемого моата) · источник: ai-thesis.md §2, §4.
5 · Prompt management5 · Управление промптами
Purpose: prompts are code — versioned, reviewed, regression-gated. Bar: an engineer can change the MT prompt safely, because a PR can't merge if it regresses the eval set. Refresh: per prompt change (PR-gated)Обновление: на каждое изменение промпта (через PR-гейт) Цель: промпты — это код: версионируются, ревьюятся, закрыты регресс-гейтом. Планка: инженер может безопасно менять MT-промпт, потому что PR не вмержится, если ухудшит набор евалов. Refresh: per prompt change (PR-gated)Обновление: на каждое изменение промпта (через PR-гейт)
No prompt CMS day one. The MT system prompt + per-user glossary live as versioned modules in git (prompts/mt-v*.ts), and every deployed version is stamped into mt_prompt_versions (version, system_prompt, glossary_hash, deployed_at). Each billable second in usage_ledger records which prompt version produced it — so we can attribute a quality or cost shift to an exact prompt change. The glossary term-lock injector (names, jargon as a prompt prefix) is the cheap quality lever raw-NMT competitors skip.
Никакого prompt-CMS в первый день. MT-систем-промпт + глоссарий на юзера живут как версионируемые модули в git (prompts/mt-v*.ts), и каждая задеплоенная версия фиксируется в mt_prompt_versions (version, system_prompt, glossary_hash, deployed_at). Каждая биллингуемая секунда в usage_ledger хранит, какая версия промпта её произвела — так мы привязываем сдвиг качества или стоимости к точному изменению промпта. Инжектор term-lock глоссария (имена, жаргон как префикс промпта) — дешёвый рычаг качества, который сырые NMT-конкуренты пропускают.
- Edit a
prompts/mt-v*.tsmodule in a branch — never hot-patch a prompt in prod.Правишь модульprompts/mt-v*.tsв ветке — никогда не патчишь промпт в проде вживую. - Open a PR. CI runs
babelio-evalsagainst the new prompt on the full clip set — same gate as code.Открываешь PR. CI прогоняетbabelio-evalsпротив нового промпта на всём наборе клипов — тот же гейт, что и для кода. - Regression blocks merge. Any drop in chrF/COMET, glossary-hit, or hallucination → red → PR can't merge. A second engineer reviews the diff + the eval delta.Регрессия блокирует merge. Любое падение chrF/COMET, попадания в глоссарий или рост галлюцинаций → красный → PR не вмержить. Второй инженер ревьюит дифф + дельту евалов.
- Deploy stamps the version. New row in
mt_prompt_versions;usage_ledgerstarts attributing sessions to it. Roll back = redeploy the prior version row.Деплой штампует версию. Новая строка вmt_prompt_versions;usage_ledgerначинает привязывать сессии к ней. Откат = передеплой строки прошлой версии.
tech.md §3, §4 · regression gate = the same babelio-evals from §2.
→ Версии промптов + схема глоссария: tech.md §3, §4 · регресс-гейт = тот же babelio-evals из §2.
6 · AI Act / GDPR / safety6 · AI Act / GDPR / безопасность
Purpose: the compliance gates that bind a synthetic-audio product reaching EU users — what applies, the response, and who owns it. Bar: an engineer knows which gates block a release vs which can wait. Refresh: quarterly + on any regime changeОбновление: раз в квартал + при изменении регулирования Цель: комплаенс-гейты для продукта с синтетическим аудио, доходящего до EU-пользователей — что применяется, какой ответ и кто владелец. Планка: инженер знает, какие гейты блокируют релиз, а какие могут подождать. Refresh: quarterly + on any regime changeОбновление: раз в квартал + при изменении регулирования
| RegimeРегламент | Applies?Применимо? | Engineering responseИнженерный ответ | OwnerВладелец |
|---|---|---|---|
| EU AI Act Art. 50 transparency (binds 2 Aug 2026)прозрачность (с 2 авг 2026) | YES — primaryДА — основной | Persistent "AI dub active" UI indicator; outputs machine-readable as synthetic; deepfake disclosure for clone mode. Follow EU Code of Practice on AI-content marking.Постоянный UI-индикатор «AI-озвучка активна»; вывод машинно-читаемо помечен как синтетический; раскрытие дипфейка для clone-режима. Следовать Кодексу ЕС по маркировке AI-контента. | Client engClient eng |
| EU AI Act Art. 4 AI literacy (live)AI-грамотность (действует) | YES — allДА — все | 1-page written AI-literacy policy + staff training log. Free, mandatory, don't skip.Письменная политика AI-грамотности на 1 стр + лог обучения команды. Бесплатно, обязательно, не пропускать. | FounderФаундер |
| GDPR (speech = personal data)(речь = перс. данные) | YESДА | Transient streaming, no default audio retention; on-device VAD/STT where hardware allows; honor erasure across transcripts. Pin no-train business tiers w/ providers.Транзитный стриминг, без хранения аудио по умолчанию; on-device VAD/STT где позволяет железо; исполнять удаление по расшифровкам. Закрепить no-train бизнес-тарифы с провайдерами. | BackendBackend |
| Wiretap / two-party consentПрослушка / согласие сторон | YES — sleeperДА — скрытый | Don't record/store call audio by default; AUP clause + in-app nudge that recording others may need consent.Не записывать/хранить аудио звонков по умолчанию; пункт AUP + подсказка в приложении, что запись других может требовать согласия. | Client + legalClient + legal |
| Voice-clone consent (ELVIS Act, CA §3344, EU)Согласие на клон голоса (ELVIS Act, CA §3344, EU) | Gates clone roadmapГейтит clone-роадмап | Hard block on clone release until a documented consent flow ships; mirror ElevenLabs mandatory consent confirmation; Art. 50 deepfake disclosure.Жёсткий блок релиза clone, пока не выпущен задокументированный флоу согласия; зеркалить обязательное подтверждение согласия ElevenLabs; раскрытие дипфейка по ст. 50. | Founder + legalФаундер + legal |
| Mistranslation liabilityОтветственность за неверный перевод | YESДА | Confidence threshold on STT+MT → fall back to subtitle (preserve original audio) when low; never auto-mute a low-confidence segment. ToS output disclaimer.Порог уверенности на STT+MT → фолбэк в субтитры (сохранить оригинал) при низкой; никогда не мьютить сегмент с низкой уверенностью. Дисклеймер вывода в ToS. | PipelinePipeline |
| Annex III high-riskAnnex III высокий риск | NO — stay outНЕТ — не входить | Don't market "exam" or "medical interpreting" without re-checking — that can pull us into high-risk (live Dec 2027).Не маркетить «перевод экзаменов» или «медицинский перевод» без перепроверки — это может затянуть в высокий риск (с дек 2027). | FounderФаундер |
| SOC 2 | Not yetПока нет | Skip until a real $50K+ B2B deal is blocked; then Type I in 8–12 wks via Vanta/Drata.Пропустить, пока не упрётся реальная B2B-сделка на $50K+; тогда Type I за 8–12 нед через Vanta/Drata. | FounderФаундер |
Don't ship clone mode without the consent flowНе выпускай clone без флоу согласия
Voice-clone is a regulated feature, not a UX toggle. No consent capture + provider-ToS compliance + deepfake disclosure = no release.Клонирование голоса — регулируемая фича, а не UX-тумблер. Нет захвата согласия + комплаенса ToS провайдера + раскрытия дипфейка = нет релиза.
Don't persist call audio by defaultНе храни аудио звонков по умолчанию
Live private meeting audio is the most sensitive payload possible. Transient streaming only; transcripts are opt-in; on-device where hardware allows.Аудио живых приватных встреч — максимально чувствительный payload. Только транзитный стриминг; расшифровки — по согласию; on-device где позволяет железо.
Don't auto-mute on low confidenceНе мьютить при низкой уверенности
If STT+MT confidence is low, never kill the original speaker — degrade to subtitle and keep the original audio. A wrong confident dub in a live meeting carries real liability.При низкой уверенности STT+MT никогда не глуши оригинального спикера — деградируй в субтитры и сохрани оригинал. Уверенно-неверная озвучка на живой встрече несёт реальную ответственность.
legal-ops.md §3, §4 · risk owners: 16-risk-register · ToS clauses: legal-ops.md §2.
→ Полные детали комплаенса: legal-ops.md §3, §4 · владельцы рисков: 16-risk-register · пункты ToS: legal-ops.md §2.