Усміхнений персонаж-бавовна з оригінального логотипа Cotton, без фону й напису
Назад до зали

Cotton

Translation workflow

Згенеровані переклади стають результатами, які можна рецензувати.

Робочий процес перекладу ігрових діалогів.

2026.05.06 — 2026.05.26

Робочий проєкт · обробка перекладу, оцінювання й шлях рецензування

  • ВебзастосунокРеалізовано · розробка

Cotton vocabulary

Lens
Refinement Loop
Translation
Quality Estimation
Workflow
Job Control
Human Review
  1. prompt layers
  2. glossary
  3. generation
  4. revision
  1. judge
  2. hard gate
  3. score
  1. intake
  2. checkpoint
  3. spend control
  4. stale sweep
  1. approval
  2. correction
  3. audit trail

Prompt Layers: SYSTEM_PROMPT_L0 · buildTranslateUserMessage · L1 CONTRACT · L3 SPEAKER · L6 SOURCE · L7 INSTRUCTION · ICU PLACEHOLDER · INLINE TAG · TARGET TEXT ONLY · FORCED MAPPING · L2 GLOSSARY · speaker_keyGlossary: glossary_term · fetchGlossaryHits · canonical_form · forbidden_translations · SUBSTRING MATCH · FORCED MAPPING · FORBIDDEN ALTERNATIVE · L2 GLOSSARY · glossary_hits · glossary_complianceGeneration: AdapterRegistry · anthropic-sdk · openai-sdk · claude-local · codex-local · llm_plan · PIVOT_VIA · shouldPivot · COTTON_ADAPTER_CONCURRENCY · NODE_OPTIONS · pivot_register_carry · translation.refinedRevision: buildTranslateUserMessage · L7 INSTRUCTION · runRefinementLoop · priorAttempt · priorCritique · REJECTED BY THE JUDGE · maxTurns · willRetry · RefinementHooks · HOOK ABORT · turn_count_to_final · critique_for_retry · failingDimensions · cost_ceiling_usd · needs_reviewJudge: glossary_hits · runJudge · JUDGE_SYSTEM_PROMPT · judgeModel · TEMPERATURE 0 · parseJudgeResponse · FOUR-SECTION XML · VERBATIM CHUNKS · severity · critique_for_retry · judge_citation · missingHardGates · TRIGGER ABSENT = PASS · judge.scoredHard Gate: ICU PLACEHOLDER · INLINE TAG · FORBIDDEN ALTERNATIVE · hard_gate_fail · hardGatePassed · glossary_compliance · cps_budget_compliant · icu_validity · inline_tag_preserved · length_constraint · HARD GATE FIRST · missingHardGates · TRIGGER ABSENT = PASSScore: HARD GATE FIRST · computeVerdict · cottonEvalScore · WEIGHTED AVERAGE · tone_register · personality_consistent · emotional_state_match · cultural_marker_preserved · accuracy · pivot_register_carry · auto_approve_threshold · failingDimensions · approval_gate · judge.scoredIntake: processXlsxBytes · classifySheetName · parseGoogleSheetsUrl · source_file · content_sha256 · extractStageDirection · speaker_key · ingest_session · segment.ingested · github.push.receivedCheckpoint: translation_progress · last_completed_step · turn_translated · turn_judged · finalized · jobEntryGuard · SELECT FOR UPDATE · attempt_count · DEFAULT_MAX_RESUME_ATTEMPTS · TWO-TX SPLIT · ON CONFLICT DO NOTHINGSpend Control: llm_plan · costCap · cost_ceiling_usd · rateLimit · FailoverDispatcher · haltOnQuota · detectQuotaFromStream · quota_daily_exhausted · auth_revoked · NO AUTO-SWAP · needs_credential · POST /:id/resumeStale Sweep: COTTON_ADAPTER_CONCURRENCY · NODE_OPTIONS · attempt_count · runStaleSweep · STALE_THRESHOLD_INTERVAL · DLQ_ATTEMPT_CAP · LIMIT 200 · re_enqueued · dead_lettered · ORPHAN RE-ENQUEUE · IN-FLIGHT SET · /health/queues · maxStalledCount · needs_reviewApproval: auto_approve_threshold · ingest_session · SELECT FOR UPDATE · needs_credential · POST /:id/resume · POST /:id/approve · POST /:id/unapprove · POST /:id/reject · APPROVE_FROM · REJECT_FROM · needs_review · reviewer_id · HITL · approval_gate · translation.approved · EDIT & APPROVE · actor_idCorrection: POST /:id/correct · corrected_text · CORRECT_FROM · EDIT & APPROVE · human_corrected_segments · human-corrected-after-mt · translation.human_corrected · supersedes · NEW REVISION · IMMUTABLE HISTORYAudit Trail: turn_count_to_final · severity · judge_citation · content_sha256 · segment.ingested · github.push.received · translation.approved · human_corrected_segments · translation.human_corrected · IMMUTABLE HISTORY · event_log · appendNextEvent · ULID · AGGREGATE VERSION · translation_state_log · actor_id · llm_call_log · telemetryHook · judge.scored · translation.refined

Оцінки, повторні спроби й рецензування людиною — кожне на своїй межі.

Генерація й оцінювання спільно використовують глосарій, а провал жорсткого порогу, про який повідомила модель-суддя, не може бути компенсований середнім балом. Проміжні стани перекладу й оцінювання записуються, ліміти повторів і вартості тримаються окремо від вичерпаних облікових даних, а завислі завдання повертаються в чергу чи на рецензування залежно від причини.

Цей робочий проєкт поєднує генерацію перекладу, оцінку якості з боку моделі, повторні спроби й рецензування людиною в одному потоці.

Від початку репозиторію до роботи, підтвердженої під час співпраці

Вебзастосунок з екранами редагування й схвалення перекладів, API та обробником завдань, що працює в середовищі розробки.

Карта потоку оцінювання · за закритими записами реалізації
Cotton: оцінювання перекладу · повтор · відновленняAPI комітить вихідний текст і цільові мови до бази даних, а потім ставить у чергу завдання для кожної цільової мови. Воркер блокує рядок, перевіряє спробу, створює чернетку й стан поступу, генерує переклад із глосарієм і окремо викликає модель-суддю з тим самим глосарієм. Переклад (Tx1) і оцінка з доказами (Tx2) записуються в окремих транзакціях. Код агрегує оцінку так, щоб провал жорсткого порогу не компенсувався середнім: успіх фіналізується, провал отримує ще один хід, ліміт ходів чи вартості передає на рецензування людиною, а сигнал квоти чи автентифікації зупиняє витрати й чекає перевірки облікових даних. Огляд завислих переглядає до 200 чернеток, старших за 10 хвилин: ту, що має спроби, але відсутня в черзі, знову ставлять у чергу, а ту, що вичерпала спроби, надсилають на рецензування чи перевірку облікових даних залежно від наявності результату.Джерело · цільові мовиЗбережені сегментиРецензування людиноюneeds_review · не схваленняПеревірка облікових данихneeds_credentialAPI · реєстрація завданьЧерга після комітуЧерга завданьBullMQ · ID завданняВхід завданняБлокування рядка · перевірка спробиГлосарій · контекстГлосарій робочого просторуХід перекладуГенерація · виклик моделіВиклик моделі-судді · розбірПравила вердиктуЖорсткий поріг · зважене середнєПовтор · витратиХоди · вартість · квотаСтан перекладуЧернетка · поступРядки перекладу · оцінкиСтан · журнал викликівФіналізаціяФінальна транзакціяПеревірка чергиПорівняння стану чергиОгляд завислихЧернетки понад 10 min · макс. 200Вхід · чергаГенерація · оцінюванняСтан · прийманняВідновлення · рішення людини1джерело2 після коміту · Черга після коміту → BullMQ · ID завдання23 доставка завдання · BullMQ · ID завдання → Блокування рядка · перевірка спроби34рядок поступу5спробу дозволено1глосарій2 той самий глосарій · Глосарій робочого простору → Виклик моделі-судді · розбір23Tx1 · переклад4Tx2 · оцінювання5 оцінки · пороги · Виклик моделі-судді · розбір → Жорсткий поріг · зважене середнє56вердикт7pass8фінальний запис1вердикт2наступний хід3ліміт · переривання4квота · автентифікація5ручне відновлення1зависла чернетка2 нижче ліміту · Чернетки понад 10 min · макс. 200 → Порівняння стану черги23знову в чергу4 результат є · Чернетки понад 10 min · макс. 200 → Рецензування людиною45результату немає

Реєстрація → вхід

Ставиться в чергу після коміту в базу даних; воркер блокує рядок, перевіряє спробу й створює чернетку.

  1. Джерело · цільові мовиДані: джерелоЧерга після комітуAPI · реєстрація завдань

    Вихідні сегменти й цільові мови проєкту зберігаються в базі даних. Дані клієнта не показано.

  2. Черга після комітуAPI · реєстрація завданьДані: після комітуBullMQ · ID завданняЧерга завдань

    Після коміту в базу даних для кожної активної цільової мови в чергу ставиться завдання з ID, визначеним у межах запиту. Якщо постановка в чергу не вдається, лише логується попередження, а коміт не відкочується (атомарного outbox немає), — тому й існує огляд завислих.

  3. BullMQ · ID завданняЧерга завданьЗапуск · рішення: доставка завданняБлокування рядка · перевірка спробиВхід завдання

    BullMQ асинхронно передає завдання воркеру.

  4. Блокування рядка · перевірка спробиВхід завданняДані: рядок поступуЧернетка · поступСтан перекладу

    Усередині транзакції рядок поступу блокується й створюється чернетка перекладу. Автоматичні повтори фіналізованих або призупинених через облікові дані завдань пропускаються; ручні запити обробляються окремо.

  5. Блокування рядка · перевірка спробиВхід завданняЗапуск · рішення: спробу дозволеноГенерація · виклик моделіХід перекладу

    Лічильник спроб збільшується на один у межах ліміту, після чого починається хід перекладу.

Генерація → оцінювання → фіналізація

Генерація й оцінювання використовують той самий глосарій; переклад і оцінку записують окремо, а код агрегує оцінку перед фіналізацією.

  1. Глосарій робочого просторуГлосарій · контекстДані: глосарійГенерація · виклик моделіХід перекладу

    Глосарій робочого простору й контекст знаходять і передають генерації.

  2. Глосарій робочого просторуГлосарій · контекстДані: той самий глосарійВиклик моделі-судді · розбірХід перекладу

    Оцінювання отримує ті самі обмеження глосарію.

  3. Генерація · виклик моделіХід перекладуДані: Tx1 · перекладРядки перекладу · оцінкиСтан перекладу

    Модель викликається напряму або через проміжну en-US, а виклик, подію й поступ записують однією транзакцією. Якщо завдання запускається знову після аварійного збою, виклик перекладу та його вартість можуть повторитися.

  4. Виклик моделі-судді · розбірХід перекладуДані: Tx2 · оцінюванняРядки перекладу · оцінкиСтан перекладу

    Оцінки судді й докази вставляються один раз на переклад і хід; дублікат знаходить наявний рядок, а цитати записуються лише під час першої вставки. Це не та сама транзакція, що й переклад.

  5. Виклик моделі-судді · розбірХід перекладуДані: оцінки · порогиЖорсткий поріг · зважене середнєПравила вердикту

    Відповідь моделі-судді розбирається на оцінки за вимірами й результати порогів. Чи пройшов глосарій — це те, що повідомляє модель-суддя.

  6. Жорсткий поріг · зважене середнєПравила вердиктуЗапуск · рішення: вердиктХоди · вартість · квотаПовтор · витрати

    Будь-який повідомлений провал жорсткого порогу означає нуль і провал; лише потім застосовуються зважене середнє й пороги за вимірами. Загальний поріг 8.0 — типове значення конфігурації, а не спостережена якість перекладу.

  7. Ходи · вартість · квотаПовтор · витратиЗапуск · рішення: passФінальна транзакціяФіналізація

    Успіх фіналізується як translated.

  8. Фінальна транзакціяФіналізаціяДані: фінальний записСтан · журнал викликівСтан перекладу

    Кандидат, стан, оцінка й ходи фіналізуються, а фіналізація поступу й журнал станів записуються однією транзакцією. Подія завершення перекладу надсилається лише для translated.

Повтор · ліміти витрат

Непроходження означає ще один хід; ліміт — рецензування людиною; квота чи автентифікація зупиняють витрати й чекають, поки оператор відновить роботу.

  1. Жорсткий поріг · зважене середнєПравила вердиктуЗапуск · рішення: вердиктХоди · вартість · квотаПовтор · витрати

    Будь-який повідомлений провал жорсткого порогу означає нуль і провал; лише потім застосовуються зважене середнє й пороги за вимірами. Загальний поріг 8.0 — типове значення конфігурації, а не спостережена якість перекладу.

  2. Ходи · вартість · квотаПовтор · витратиЗапуск · рішення: наступний хідГенерація · виклик моделіХід перекладу

    Переклад, що не пройшов, генерується знову з попереднім перекладом і критикою. Навіть провал жорсткого порогу спершу можна спробувати знову, а не одразу передавати людині.

  3. Ходи · вартість · квотаПовтор · витратиЗапуск · рішення: ліміт · перериванняРецензування людиною

    Коли ходи вичерпано або досягнуто стелі вартості, завдання фіналізується як needs_review. «Фіналізовано» означає, що обробку завершено, а не що людина схвалила.

  4. Ходи · вартість · квотаПовтор · витратиЗбій · ліміт: квота · автентифікаціяПеревірка облікових даних

    Сигнал квоти чи автентифікації зупиняє витрати й встановлює needs_credential. Автоматичного перемикання на інший обліковий запис чи провайдера немає. Транспортні помилки без сигналу зупинки повертаються до повторів BullMQ.

  5. Перевірка облікових данихЗапуск · рішення: ручне відновленняBullMQ · ID завданняЧерга завдань

    Оператор, який перевірив облікові дані, явно перезапускає.

Відновлення завислих завдань

Старі чернетки розділяються за причиною: відсутність у черзі означає повторну постановку в чергу, вичерпані спроби — рішення людини.

  1. Чернетка · поступСтан перекладуСпостереження · звіт: зависла чернеткаЧернетки понад 10 min · макс. 200Огляд завислих

    Читається до 200 кандидатів, що залишаються чернетками понад 10 хвилин, починаючи з найстаріших. Запит не бере блокування, а оновлення й журнали виконуються окремими інструкціями, тож це не описано як пакет без станів гонитви.

  2. Чернетки понад 10 min · макс. 200Огляд завислихЗапуск · рішення: нижче лімітуПорівняння стану чергиПеревірка черги

    Якщо спроб менше за ліміт (3), завдання порівнюють зі станами черги active, waiting, delayed і prioritized. У коді гілка вичерпаних спроб іде перед цією перевіркою черги.

  3. Порівняння стану чергиПеревірка чергиЗапуск · рішення: знову в чергуBullMQ · ID завданняЧерга завдань

    Якщо завдання немає в черзі, його знову ставлять у чергу. API використовує ID із суфіксом запиту, а огляд шукає за ID сегмента й мови, тож це не описано як відповідність кожному запиту в процесі.

  4. Чернетки понад 10 min · макс. 200Огляд завислихЗапуск · рішення: результат єРецензування людиною

    Якщо всі 3 спроби використано й результат перекладу є, завдання переходить у needs_review.

  5. Чернетки понад 10 min · макс. 200Огляд завислихЗапуск · рішення: результату немаєПеревірка облікових даних

    Якщо всі 3 спроби використано, а результату немає, завдання переходить у needs_credential.

Усі зв’язки однакової товщини. Оберіть потік, щоб підсвітити лише його шлях із пронумерованими кроками.

  • Суцільна · напрямок входів, результатів і записів
  • Штрихова · запуск, рішення, запит
  • Довга пунктирна · спостереження й звітування, окремо від рішення
  • Коротка штрихова · збій, зупинка, ліміт
  • Товста чорна лінія · обраний потік; номери показують порядок
  • Рамка · межа коду чи стану, названа в заголовку
  • Внутрішня плашка · компонент цієї межі
  • Пунктирна рамка · поза цією межею
  • Помаранчевий контур · де вирішує модель
  • Генерація · витрати · фіналізація
  • Вхід · правила вердикту · огляд
  • Черга · стан · записи
  • Реєстрація · перевірка черги

Накреслено за закритими записами реалізації й розробки. Дані клієнтів і шляхи коду не показано.

Один огляд
May 26, 2026, один цикл огляду в середовищі розробки: 200 перевірено, 106 переходів стану, 2 знову в черзі. Перехід стану — не успішний переклад, і розподіл 106 за цільовими станами не записано.
Чому не рівно один раз
Записи робляться без дублікатів, але якщо завдання запускається знову після аварійного збою, виклики моделі та їхня вартість можуть повторитися. Ліміт паралельності діє на рівні процесу, а не всього кластера.
Межі вердикту
Те, що середнє не може перекрити провал глосарію, — це правило агрегування повідомлених порогів. Воно не доводить, що знайдено кожен заборонений термін чи що якість на рівні носія мови.