Усмихнат памучен персонаж от оригиналното лого на 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 прави къмит на изходния текст и целевите езици в базата данни, след което поставя в опашката по една задача за всеки целеви език. Работен процес заключва реда, проверява опита, създава draft и състоянието на напредъка, генерира превод с речника и отделно извиква модел съдия със същия речник. Преводът (Tx1) и преценката с доказателствата ѝ (Tx2) се записват в отделни транзакции. Кодът агрегира преценката, така че неуспех на твърда порта не се компенсира от средната стойност: успешният резултат се финализира, неуспешният получава нов ход, лимитът на ходовете или разходите го изпраща за човешки преглед, а сигнал за квота или удостоверяване спира разходите и чака проверка на идентификационните данни. Проверка stale разглежда до 200 draft, по-стари от 10 минути: такъв с оставащи опити, но липсващ в опашката, се връща в нея, а такъв с изчерпани опити отива за преглед или за проверка на идентификационните данни според това дали има резултат.Изходен текст · целеви езициСъхранени сегментиЧовешки прегледneeds_review · не е одобрениеПроверка на идентификационните данниneeds_credentialAPI · регистриране на задачиПоставяне в опашка след къмитОпашка за задачиBullMQ · ID на задачаВлизане на задачатаЗаключване на ред · проверка на опитаРечник · контекстРечник на работното пространствоХод на преводаГенериране · извикване на моделаИзвикване на модела съдия · анализПравила за вердиктаТвърда порта · претеглена средна стойностПовторен опит · разходиХодове · разход · квотаСъстояние на преводаDraft · напредъкРедове за превод · преценкаСъстояние · лог на извикваниятаФинализиранеФинална транзакцияПроверка на опашкатаСравняване на състоянието на опашкатаПроверка staleDraft, по-стари от 10 min · макс. 200Вход · опашкаГенериране · преценкаСъстояние · приеманеВъзстановяване · човешко решение1 изходен текст · Изходен текст · целеви езици → Поставяне в опашка след къмит12 след къмит · Поставяне в опашка след къмит → BullMQ · ID на задача23 доставка на задачата · BullMQ · ID на задача → Заключване на ред · проверка на опита34ред за напредъка5опитът е разрешен1речник2 същият речник · Речник на работното пространство → Извикване на модела съдия · анализ23Tx1 · превод4Tx2 · преценка5 оценки · порти · Извикване на модела съдия · анализ → Твърда порта · претеглена средна стойност56вердикт7pass8краен запис1вердикт2следващ ход3лимит · прекратяване4квота · удостоверяване5ръчно продължаване1блокирал draft2под лимита3връщане в опашката4 има резултат · Draft, по-стари от 10 min · макс. 200 → Човешки преглед45няма резултат

Регистриране → влизане

Поставя се в опашката след къмита в базата данни; работен процес заключва реда, проверява опита и създава draft.

  1. Изходен текст · целеви езициДанни: изходен текстПоставяне в опашка след къмитAPI · регистриране на задачи

    Изходните сегменти и целевите езици на проекта се съхраняват в базата данни. Данните на клиентите не са показани.

  2. Поставяне в опашка след къмитAPI · регистриране на задачиДанни: след къмитBullMQ · ID на задачаОпашка за задачи

    След къмита в базата данни за всеки активен целеви език в опашката се поставя задача с ID на ниво заявка. Ако поставянето в опашката се провали, се записва само предупреждение, а къмитът не се отменя (няма атомарен outbox), и затова съществува проверката stale.

  3. BullMQ · ID на задачаОпашка за задачиИзпълнение · преценка: доставка на задачатаЗаключване на ред · проверка на опитаВлизане на задачата

    BullMQ предава задачата на работен процес асинхронно.

  4. Заключване на ред · проверка на опитаВлизане на задачатаДанни: ред за напредъкаDraft · напредъкСъстояние на превода

    В рамките на транзакция редът за напредъка се заключва и се създава draft превод. Автоматичните повторни опити за финализирани задачи или задачи, спрени заради идентификационни данни, се пропускат; ръчните заявки се обработват отделно.

  5. Заключване на ред · проверка на опитаВлизане на задачатаИзпълнение · преценка: опитът е разрешенГенериране · извикване на моделаХод на превода

    Броят опити се увеличава с едно в рамките на лимита, след което започва ходът на превода.

Генериране → преценка → финализиране

Генерирането и преценката използват един и същ речник; преводът и преценката се записват отделно, а кодът агрегира преценката преди финализирането.

  1. Речник на работното пространствоРечник · контекстДанни: речникГенериране · извикване на моделаХод на превода

    Речникът и контекстът на работното пространство се търсят и се подават на генерирането.

  2. Речник на работното пространствоРечник · контекстДанни: същият речникИзвикване на модела съдия · анализХод на превода

    Преценката получава същите ограничения от речника.

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

    Моделът се извиква директно или чрез en-US pivot, а извикването, събитието и напредъкът се записват в една транзакция. Ако задачата се изпълни отново след срив, извикването за превод и разходът му могат да се повторят.

  4. Извикване на модела съдия · анализХод на преводаДанни: Tx2 · преценкаРедове за превод · преценкаСъстояние на превода

    Оценките и доказателствата на съдията се вмъкват веднъж за всеки превод и ход; дубликат намира съществуващия ред, а цитатите се записват само при първото вмъкване. Това не е същата транзакция като превода.

  5. Извикване на модела съдия · анализХод на преводаДанни: оценки · портиТвърда порта · претеглена средна стойностПравила за вердикта

    Отговорът на модела съдия се анализира в оценки по измерения и резултати от портите. Дали речникът е спазен, отчита моделът съдия.

  6. Твърда порта · претеглена средна стойностПравила за вердиктаИзпълнение · преценка: вердиктХодове · разход · квотаПовторен опит · разходи

    Всеки отчетен неуспех на твърда порта означава нула и неуспех; едва след това се прилагат претеглената средна стойност и праговете по измерения. Общият праг от 8.0 е стойност по подразбиране в конфигурацията, а не наблюдавано качество на превода.

  7. Ходове · разход · квотаПовторен опит · разходиИзпълнение · преценка: passФинална транзакцияФинализиране

    Успешният резултат се финализира като translated.

  8. Финална транзакцияФинализиранеДанни: краен записСъстояние · лог на извикваниятаСъстояние на превода

    Кандидатът, състоянието, оценката и ходовете се финализират, а напредъкът finalized и логът на състоянието се записват в една транзакция. Събитие за завършен превод се излъчва само при translated.

Повторни опити · лимити за разходи

Без успех следва нов ход; при лимит – човешки преглед; при квота или удостоверяване разходите спират и се чака оператор да продължи.

  1. Твърда порта · претеглена средна стойностПравила за вердиктаИзпълнение · преценка: вердиктХодове · разход · квотаПовторен опит · разходи

    Всеки отчетен неуспех на твърда порта означава нула и неуспех; едва след това се прилагат претеглената средна стойност и праговете по измерения. Общият праг от 8.0 е стойност по подразбиране в конфигурацията, а не наблюдавано качество на превода.

  2. Ходове · разход · квотаПовторен опит · разходиИзпълнение · преценка: следващ ходГенериране · извикване на моделаХод на превода

    Превод, който не мине, се генерира отново заедно с предишния превод и критиката. Дори неуспех на твърда порта може първо да се опита отново, вместо да отиде директно при човек.

  3. Ходове · разход · квотаПовторен опит · разходиИзпълнение · преценка: лимит · прекратяванеЧовешки преглед

    Когато ходовете свършат или се достигне таванът на разходите, задачата се финализира като needs_review. Финализирано означава, че обработката е приключила, а не че човек я е одобрил.

  4. Ходове · разход · квотаПовторен опит · разходиНеуспех · лимит: квота · удостоверяванеПроверка на идентификационните данни

    Сигнал за квота или удостоверяване спира разходите и задава needs_credential. Няма автоматично превключване към друг акаунт или доставчик. Транспортните грешки без сигнал за спиране се връщат към повторните опити на BullMQ.

  5. Проверка на идентификационните данниИзпълнение · преценка: ръчно продължаванеBullMQ · ID на задачаОпашка за задачи

    Оператор, който е проверил идентификационните данни, рестартира изрично.

Възстановяване на блокирали задачи

Старите draft се разделят според причината: липса в опашката означава връщане в нея, изчерпани опити означават човешко решение.

  1. Draft · напредъкСъстояние на преводаНаблюдение · отчет: блокирал draftDraft, по-стари от 10 min · макс. 200Проверка stale

    Четат се до 200 кандидата, които са в draft повече от 10 минути, започвайки от най-старите. Заявката не заключва, а обновяванията и логването се изпълняват като отделни команди, затова това не е описано като партида без състезания.

  2. Draft, по-стари от 10 min · макс. 200Проверка staleИзпълнение · преценка: под лимитаСравняване на състоянието на опашкатаПроверка на опашката

    При по-малко опити от лимита (3) задачата се сравнява със състоянията на опашката active, waiting, delayed и prioritized. В кода клонът за изчерпани опити идва преди тази проверка на опашката.

  3. Сравняване на състоянието на опашкатаПроверка на опашкатаИзпълнение · преценка: връщане в опашкатаBullMQ · ID на задачаОпашка за задачи

    Ако задачата не е в опашката, тя се поставя отново. API използва ID с наставка на заявката, докато проверката търси ID на сегмента и езика, затова не е описано, че покрива всяка заявка в ход.

  4. Draft, по-стари от 10 min · макс. 200Проверка staleИзпълнение · преценка: има резултатЧовешки преглед

    При изчерпани и трите опита и наличен резултат от превода задачата отива в needs_review.

  5. Draft, по-стари от 10 min · макс. 200Проверка staleИзпълнение · преценка: няма резултатПроверка на идентификационните данни

    При изчерпани и трите опита и без резултат задачата отива в needs_credential.

Всички връзки с еднаква дебелина. Изберете поток, за да се откроят само неговият път и номерираните стъпки.

  • Плътна · посока на входа, резултатите и записите
  • Прекъсната · изпълнение, преценка, заявка
  • Дълга пунктирна · наблюдение и отчитане, отделно от преценката
  • Къса прекъсната · неуспех, спиране, лимит
  • Дебела черна линия · избраният поток; числата показват реда
  • Кутия · граница на код или състояние, с името в заглавието
  • Вътрешен етикет · компонент на тази граница
  • Пунктирна кутия · извън тази граница
  • Оранжев контур · където решава модел
  • Генериране · разходи · финализиране
  • Влизане · правила за вердикта · проверка
  • Опашка · състояние · записи
  • Регистриране · проверка на опашката

Начертано по непубличните записи за реализацията и разработката. Данни на клиенти и пътища в кода не са показани.

Една проверка
26 май 2026 г., един цикъл на проверката в средата за разработка: 200 проверени, 106 смени на състоянието, 2 върнати в опашката. Смяната на състоянието не е успешен превод, а разпределението на 106-те по целеви състояния не е записано.
Защо не точно веднъж
Записите се правят без дубликати, но ако задача се изпълни отново след срив, извикванията на модела и разходите им могат да се повторят. Лимитът на паралелността е за процес, а не за целия клъстер.
Обхват на вердикта
Това, че средната стойност не може да покрие неуспех по речника, е правило за агрегиране на отчетените порти. То не доказва, че всеки забранен термин се открива или че качеството е на ниво носител на езика.