Smilende bomullsfigur fra den opprinnelige Cotton-logoen, med bakgrunn og bokstaver fjernet
Tilbake til salen

Cotton

Translation workflow

Genererte oversettelser gjøres om til resultater som kan gjennomgås.

En oversettelsesarbeidsflyt for spilldialog.

2026.05.06 — 2026.05.26

Arbeidsprosjekt · oversettelsesbehandling, vurdering og gjennomgangssti

  • NettappImplementert · utvikling

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

Score, nye forsøk og menneskelig gjennomgang, hver ved sin egen grense.

Generering og vurdering deler ordlisten, og en hard gate-feil rapportert av bedømmermodellen kan ikke oppveies av gjennomsnittsscoren. Mellomtilstander for oversettelse og vurdering registreres, grenser for nye forsøk og kostnad holdes atskilt fra oppbrukt påloggingsinformasjon, og hengende jobber går tilbake til køen eller til gjennomgang avhengig av årsaken.

Dette arbeidsprosjektet kobler sammen generering av oversettelser, kvalitetsvurdering rapportert av en modell, nye forsøk og menneskelig gjennomgang i én flyt.

Fra starten av repositoryet til arbeidet som er bekreftet i oppdragsperioden

En nettapp med skjermer for redigering og godkjenning av oversettelser, et API og en jobb-worker, som kjører i utviklingsmiljøet.

Kart over vurderingsflyten · ut fra private implementeringslogger
Cotton: vurdering av oversettelser · nye forsøk · gjenopprettingAPI-et committer kildeteksten og målspråkene til databasen og legger deretter en jobb i kø per målspråk. En worker låser raden, kontrollerer forsøket, oppretter draft- og framdriftstilstanden, genererer en oversettelse med ordlisten og kaller separat en bedømmermodell med den samme ordlisten. Oversettelsen (Tx1) og vurderingen med belegget (Tx2) registreres i separate transaksjoner. Koden aggregerer vurderingen slik at en hard gate-feil ikke oppveies av gjennomsnittet: en bestått oversettelse ferdigstilles, en som feiler, får en tur til, grensen for turer eller kostnad sender den til menneskelig gjennomgang, og et kvote- eller autentiseringssignal stopper forbruket og venter på en kontroll av påloggingsinformasjon. En opprydding av hengende jobber går gjennom opptil 200 drafts eldre enn 10 minutter: en med forsøk igjen som mangler i køen, legges i kø på nytt, og en med oppbrukte forsøk går til gjennomgang eller kontroll av påloggingsinformasjon avhengig av om det finnes et resultat.Kilde · målspråkLagrede segmenterMenneskelig gjennomgangneeds_review · ikke godkjenningKontroll av påloggingsinformasjonneeds_credentialAPI · jobbregistreringLegg i kø etter commitJobbkøBullMQ · jobb-IDInngang til jobbRadlås · kontroll av forsøkOrdliste · kontekstWorkspace-ordlisteOversettelsesturGenerer · modellkallKall til bedømmermodell · parsingDomsreglerHard gate · vektet gjennomsnittNye forsøk · forbrukTurer · kostnad · kvoteOversettelsestilstandDraft · framdriftRader for oversettelse · vurderingTilstand · kalloggFerdigstillingAvsluttende transaksjonKøkontrollSammenlign køtilstandOpprydding av hengende jobberDrafts over 10 min · maks. 200Input · køGenerering · vurderingTilstand · akseptGjenoppretting · menneskelig beslutning1kilde2 etter commit · Legg i kø etter commit → BullMQ · jobb-ID23lever jobb4framdriftsrad5forsøk tillatt1ordliste2 samme ordliste · Workspace-ordliste → Kall til bedømmermodell · parsing23Tx1 · oversettelse4Tx2 · vurdering5 score · gates · Kall til bedømmermodell · parsing → Hard gate · vektet gjennomsnitt56dom7pass8endelig post1dom2neste tur3grense · avbryt4kvote · autentisering5manuell gjenopptakelse1hengende draft2 under grensen · Drafts over 10 min · maks. 200 → Sammenlign køtilstand23legg i kø på nytt4 resultat finnes · Drafts over 10 min · maks. 200 → Menneskelig gjennomgang45uten resultat

Registrering → inngang

Legges i kø etter commit til databasen; en worker låser raden, kontrollerer forsøket og oppretter draften.

  1. Kilde · målspråkData: kildeLegg i kø etter commitAPI · jobbregistrering

    Kildesegmenter og prosjektets målspråk lagres i databasen. Kundedata vises ikke.

  2. Legg i kø etter commitAPI · jobbregistreringData: etter commitBullMQ · jobb-IDJobbkø

    Etter commit til databasen legges én jobb per aktivt målspråk i kø med en ID som er fastsatt per forespørsel. Mislykkes det, logges bare en advarsel, og commiten rulles ikke tilbake (ingen atomisk outbox); derfor finnes oppryddingen av hengende jobber.

  3. BullMQ · jobb-IDJobbkøKjøring · vurdering: lever jobbRadlås · kontroll av forsøkInngang til jobb

    BullMQ overleverer jobben asynkront til en worker.

  4. Radlås · kontroll av forsøkInngang til jobbData: framdriftsradDraft · framdriftOversettelsestilstand

    Innenfor en transaksjon låses framdriftsraden, og en draft-oversettelse opprettes. Automatiske nye forsøk for jobber som er ferdigstilt eller satt på pause på grunn av påloggingsinformasjon, hoppes over; manuelle forespørsler håndteres separat.

  5. Radlås · kontroll av forsøkInngang til jobbKjøring · vurdering: forsøk tillattGenerer · modellkallOversettelsestur

    Antallet forsøk økes med én innenfor grensen, og deretter starter oversettelsesturen.

Generer → vurder → ferdigstill

Generering og vurdering bruker den samme ordlisten; oversettelsen og vurderingen registreres hver for seg, og koden aggregerer vurderingen før ferdigstillingen.

  1. Workspace-ordlisteOrdliste · kontekstData: ordlisteGenerer · modellkallOversettelsestur

    Workspace-ordlisten og konteksten slås opp og sendes videre til genereringen.

  2. Workspace-ordlisteOrdliste · kontekstData: samme ordlisteKall til bedømmermodell · parsingOversettelsestur

    Vurderingen får de samme begrensningene fra ordlisten.

  3. Generer · modellkallOversettelsesturData: Tx1 · oversettelseRader for oversettelse · vurderingOversettelsestilstand

    Modellen kalles direkte eller via en en-US-pivot, og kall, hendelse og framdrift skrives i én transaksjon. Hvis jobben kjører på nytt etter et krasj, kan oversettelseskallet og kostnaden gjentas.

  4. Kall til bedømmermodell · parsingOversettelsesturData: Tx2 · vurderingRader for oversettelse · vurderingOversettelsestilstand

    Bedømmerens score og belegg settes inn én gang per oversettelse og tur; et duplikat finner den eksisterende raden, og sitater skrives bare ved første innsetting. Ikke samme transaksjon som oversettelsen.

  5. Kall til bedømmermodell · parsingOversettelsesturData: score · gatesHard gate · vektet gjennomsnittDomsregler

    Svaret fra bedømmermodellen parses til score per dimensjon og gate-resultater. Om ordlisten ble overholdt, er det bedømmermodellen som rapporterer.

  6. Hard gate · vektet gjennomsnittDomsreglerKjøring · vurdering: domTurer · kostnad · kvoteNye forsøk · forbruk

    Enhver rapportert hard gate-feil betyr null og ikke bestått; først deretter brukes det vektede gjennomsnittet og tersklene per dimensjon. Den samlede terskelen på 8.0 er en standardverdi i konfigurasjonen, ikke en observert oversettelseskvalitet.

  7. Turer · kostnad · kvoteNye forsøk · forbrukKjøring · vurdering: passAvsluttende transaksjonFerdigstilling

    En bestått oversettelse ferdigstilles som translated.

  8. Avsluttende transaksjonFerdigstillingData: endelig postTilstand · kalloggOversettelsestilstand

    Kandidat, tilstand, score og turer ferdigstilles, og framdriften finalized og tilstandsloggen skrives i én transaksjon. En hendelse om fullført oversettelse sendes bare for translated.

Nye forsøk · forbruksgrenser

Ikke bestått betyr en tur til, en grense betyr menneskelig gjennomgang, og kvote eller autentisering stopper forbruket og venter på at en operatør gjenopptar.

  1. Hard gate · vektet gjennomsnittDomsreglerKjøring · vurdering: domTurer · kostnad · kvoteNye forsøk · forbruk

    Enhver rapportert hard gate-feil betyr null og ikke bestått; først deretter brukes det vektede gjennomsnittet og tersklene per dimensjon. Den samlede terskelen på 8.0 er en standardverdi i konfigurasjonen, ikke en observert oversettelseskvalitet.

  2. Turer · kostnad · kvoteNye forsøk · forbrukKjøring · vurdering: neste turGenerer · modellkallOversettelsestur

    En oversettelse som ikke består, genereres på nytt med den forrige oversettelsen og kritikken. Selv en hard gate-feil kan først prøves på nytt i stedet for å gå rett til en person.

  3. Turer · kostnad · kvoteNye forsøk · forbrukKjøring · vurdering: grense · avbrytMenneskelig gjennomgang

    Når turene er brukt opp eller kostnadstaket er nådd, ferdigstilles jobben som needs_review. Tilstanden finalized betyr at behandlingen ble avsluttet, ikke at en person godkjente den.

  4. Turer · kostnad · kvoteNye forsøk · forbrukFeil · grense: kvote · autentiseringKontroll av påloggingsinformasjon

    Et kvote- eller autentiseringssignal stopper forbruket og setter needs_credential. Det byttes ikke automatisk til en annen konto eller leverandør. Transportfeil uten stoppsignal går tilbake til nye forsøk i BullMQ.

  5. Kontroll av påloggingsinformasjonKjøring · vurdering: manuell gjenopptakelseBullMQ · jobb-IDJobbkø

    En operatør som har kontrollert påloggingsinformasjonen, starter på nytt eksplisitt.

Gjenoppretting av hengende jobber

Gamle drafts deles etter årsak: mangler de i køen, legges de i kø på nytt; er forsøkene brukt opp, går de til en menneskelig beslutning.

  1. Draft · framdriftOversettelsestilstandObservasjon · rapport: hengende draftDrafts over 10 min · maks. 200Opprydding av hengende jobber

    Opptil 200 kandidater som har vært drafts i over 10 minutter, leses med de eldste først. Spørringen tar ingen lås, og oppdateringer og logger kjører som separate setninger, så dette beskrives ikke som en batch uten race conditions.

  2. Drafts over 10 min · maks. 200Opprydding av hengende jobberKjøring · vurdering: under grensenSammenlign køtilstandKøkontroll

    Med færre forsøk enn grensen (3) sammenlignes jobben med køtilstandene active, waiting, delayed og prioritized. I koden kommer grenen for oppbrukte forsøk før denne køkontrollen.

  3. Sammenlign køtilstandKøkontrollKjøring · vurdering: legg i kø på nyttBullMQ · jobb-IDJobbkø

    Hvis jobben ikke er i køen, legges den i kø på nytt. API-et bruker ID-er med et forespørselssuffiks, mens oppryddingen leter etter segment- og språk-ID, så den beskrives ikke som å treffe alle pågående forespørsler.

  4. Drafts over 10 min · maks. 200Opprydding av hengende jobberKjøring · vurdering: resultat finnesMenneskelig gjennomgang

    Med alle 3 forsøk brukt og et oversettelsesresultat til stede går jobben til needs_review.

  5. Drafts over 10 min · maks. 200Opprydding av hengende jobberKjøring · vurdering: uten resultatKontroll av påloggingsinformasjon

    Med alle 3 forsøk brukt og uten resultat går jobben til needs_credential.

Alle forbindelser med samme tykkelse. Velg en flyt for å fremheve bare dens vei, med nummererte steg.

  • Heltrukket · retning for input, resultater og logger
  • Stiplet · kjøring, vurdering, forespørsel
  • Lange prikker · observasjon og rapportering, atskilt fra vurdering
  • Korte streker · feil, stopp, grense
  • Kraftig svart linje · den valgte flyten; tallene angir rekkefølgen
  • Boks · kode- eller tilstandsgrense, navngitt i overskriften
  • Indre chip · en komponent innenfor grensen
  • Prikket boks · utenfor grensen
  • Oransje kontur · der en modell tar beslutninger
  • Generering · forbruk · ferdigstilling
  • Inngang · domsregler · opprydding
  • Kø · tilstand · logger
  • Registrering · køkontroll

Tegnet ut fra private implementerings- og utviklingslogger. Kundedata og kodestier vises ikke.

Én opprydding
26. mai 2026, én oppryddingssyklus i utviklingsmiljøet: 200 kontrollert, 106 tilstandsoverganger, 2 satt i kø på nytt. En tilstandsovergang er ikke en vellykket oversettelse, og fordelingen av de 106 etter måltilstand er ikke registrert.
Hvorfor ikke nøyaktig én gang
Poster skrives uten duplikater, men hvis en jobb kjører på nytt etter et krasj, kan modellkall og kostnadene deres gjentas. Grensen for samtidighet gjelder per prosess, ikke for hele klyngen.
Dommens rekkevidde
At et gjennomsnitt ikke kan skjule en ordlistefeil, er en aggregeringsregel over rapporterte gates. Det beviser ikke at alle forbudte termer blir funnet, eller at kvaliteten er på morsmålsnivå.