Smilende bomuldsfigur fra det oprindelige Cotton-logo, med baggrund og bogstaver fjernet
Tilbage til salen

Cotton

Translation workflow

Genererede oversættelser gøres til resultater, der kan gennemgås.

En oversættelsesarbejdsgang til spildialog.

2026.05.06 — 2026.05.26

Arbejdsprojekt · oversættelsesbehandling, vurdering og gennemgangssti

  • WebappImplementeret · udvikling

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

Scorer, nye forsøg og menneskelig gennemgang, hver ved sin egen grænse.

Generering og vurdering deler ordlisten, og en hard gate-fejl rapporteret af bedømmermodellen kan ikke opvejes af gennemsnitsscoren. Mellemtilstande for oversættelse og vurdering registreres, grænser for nye forsøg og omkostninger holdes adskilt fra opbrugte legitimationsoplysninger, og hængende job vender tilbage til køen eller til gennemgang afhængigt af årsagen.

Dette arbejdsprojekt forbinder generering af oversættelser, kvalitetsvurdering rapporteret af en model, nye forsøg og menneskelig gennemgang i ét forløb.

Fra repositoryets start til det arbejde, der er bekræftet i opgaveperioden

En webapp med skærme til redigering og godkendelse af oversættelser, et API og en job-worker, der kører i udviklingsmiljøet.

Kort over vurderingsforløbet · ud fra private implementeringslogs
Cotton: vurdering af oversættelser · nye forsøg · gendannelseAPI'et committer kildeteksten og målsprogene til databasen og sætter derefter et job i kø pr. målsprog. En worker låser rækken, kontrollerer forsøget, opretter draft- og fremdriftstilstanden, genererer en oversættelse med ordlisten og kalder separat en bedømmermodel med samme ordliste. Oversættelsen (Tx1) og vurderingen med dens belæg (Tx2) registreres i separate transaktioner. Koden aggregerer vurderingen, så en hard gate-fejl ikke opvejes af gennemsnittet: en bestået oversættelse færdiggøres, en fejlet får en tur til, grænsen for ture eller omkostninger sender den til menneskelig gennemgang, og et kvote- eller autentificeringssignal stopper forbruget og afventer en kontrol af legitimation. En oprydning af hængende job gennemgår op til 200 drafts ældre end 10 minutter: en med forsøg tilbage, som mangler i køen, sættes i kø igen, og en med opbrugte forsøg går til gennemgang eller kontrol af legitimation, afhængigt af om der findes et resultat.Kilde · målsprogGemte segmenterMenneskelig gennemgangneeds_review · ikke godkendelseKontrol af legitimationneeds_credentialAPI · jobregistreringSæt i kø efter commitJobkøBullMQ · job-IDIndgang til jobRækkelås · kontrol af forsøgOrdliste · kontekstWorkspace-ordlisteOversættelsesturGenerér · modelkaldKald til bedømmermodel · parsingDomsreglerHard gate · vægtet gennemsnitNye forsøg · forbrugTure · omkostninger · kvoteOversættelsestilstandDraft · fremdriftRækker for oversættelse · vurderingTilstand · kaldlogFærdiggørelseAfsluttende transaktionKøkontrolSammenlign køtilstandOprydning af hængende jobDrafts over 10 min · maks. 200Input · køGenerering · vurderingTilstand · acceptGendannelse · menneskelig beslutning1kilde2 efter commit · Sæt i kø efter commit → BullMQ · job-ID23lever job4fremdriftsrække5forsøg tilladt1ordliste2 samme ordliste · Workspace-ordliste → Kald til bedømmermodel · parsing23Tx1 · oversættelse4Tx2 · vurdering5 scorer · gates · Kald til bedømmermodel · parsing → Hard gate · vægtet gennemsnit56dom7pass8endelig post1dom2næste tur3grænse · afbryd4kvote · autentificering5manuel genoptagelse1hængende draft2 under grænsen · Drafts over 10 min · maks. 200 → Sammenlign køtilstand23sæt i kø igen4 resultat findes · Drafts over 10 min · maks. 200 → Menneskelig gennemgang45intet resultat

Registrering → indgang

Sættes i kø efter commit til databasen; en worker låser rækken, kontrollerer forsøget og opretter draften.

  1. Kilde · målsprogData: kildeSæt i kø efter commitAPI · jobregistrering

    Kildesegmenter og projektets målsprog gemmes i databasen. Kundedata vises ikke.

  2. Sæt i kø efter commitAPI · jobregistreringData: efter commitBullMQ · job-IDJobkø

    Efter commit til databasen sættes der pr. aktivt målsprog et job i kø med et ID, der er fastlagt pr. anmodning. Mislykkes det, logges kun en advarsel, og commit'en rulles ikke tilbage (ingen atomisk outbox); derfor findes oprydningen af hængende job.

  3. BullMQ · job-IDJobkøKørsel · vurdering: lever jobRækkelås · kontrol af forsøgIndgang til job

    BullMQ overdrager jobbet asynkront til en worker.

  4. Rækkelås · kontrol af forsøgIndgang til jobData: fremdriftsrækkeDraft · fremdriftOversættelsestilstand

    Inden for en transaktion låses fremdriftsrækken, og der oprettes en draft-oversættelse. Automatiske nye forsøg for job, der er færdiggjort eller sat på pause på grund af legitimation, springes over; manuelle forespørgsler håndteres separat.

  5. Rækkelås · kontrol af forsøgIndgang til jobKørsel · vurdering: forsøg tilladtGenerér · modelkaldOversættelsestur

    Antallet af forsøg øges med én inden for grænsen, og derefter starter oversættelsesturen.

Generér → vurdér → færdiggør

Generering og vurdering bruger samme ordliste; oversættelsen og vurderingen registreres hver for sig, og koden aggregerer vurderingen før færdiggørelsen.

  1. Workspace-ordlisteOrdliste · kontekstData: ordlisteGenerér · modelkaldOversættelsestur

    Workspace-ordlisten og konteksten slås op og gives videre til genereringen.

  2. Workspace-ordlisteOrdliste · kontekstData: samme ordlisteKald til bedømmermodel · parsingOversættelsestur

    Vurderingen får de samme begrænsninger fra ordlisten.

  3. Generér · modelkaldOversættelsesturData: Tx1 · oversættelseRækker for oversættelse · vurderingOversættelsestilstand

    Modellen kaldes direkte eller via en en-US-pivot, og kald, hændelse og fremdrift skrives i én transaktion. Hvis jobbet kører igen efter et nedbrud, kan oversættelseskaldet og dets omkostning gentages.

  4. Kald til bedømmermodel · parsingOversættelsesturData: Tx2 · vurderingRækker for oversættelse · vurderingOversættelsestilstand

    Bedømmerens scorer og belæg indsættes én gang pr. oversættelse og tur; en dublet finder den eksisterende række, og citater skrives kun ved første indsættelse. Ikke samme transaktion som oversættelsen.

  5. Kald til bedømmermodel · parsingOversættelsesturData: scorer · gatesHard gate · vægtet gennemsnitDomsregler

    Bedømmermodellens svar parses til scorer pr. dimension og gate-resultater. Om ordlisten blev overholdt, er det bedømmermodellen, der rapporterer.

  6. Hard gate · vægtet gennemsnitDomsreglerKørsel · vurdering: domTure · omkostninger · kvoteNye forsøg · forbrug

    Enhver rapporteret hard gate-fejl betyder nul og ikke bestået; først derefter anvendes det vægtede gennemsnit og tærsklerne pr. dimension. Den samlede tærskel på 8.0 er en standardværdi i konfigurationen, ikke en observeret oversættelseskvalitet.

  7. Ture · omkostninger · kvoteNye forsøg · forbrugKørsel · vurdering: passAfsluttende transaktionFærdiggørelse

    En bestået oversættelse færdiggøres som translated.

  8. Afsluttende transaktionFærdiggørelseData: endelig postTilstand · kaldlogOversættelsestilstand

    Kandidat, tilstand, score og ture færdiggøres, og fremdriften finalized og tilstandsloggen skrives i én transaktion. En hændelse om færdig oversættelse udsendes kun for translated.

Nye forsøg · forbrugsgrænser

Ikke bestået betyder en tur til, en grænse betyder menneskelig gennemgang, og kvote eller autentificering stopper forbruget og venter på, at en operatør genoptager.

  1. Hard gate · vægtet gennemsnitDomsreglerKørsel · vurdering: domTure · omkostninger · kvoteNye forsøg · forbrug

    Enhver rapporteret hard gate-fejl betyder nul og ikke bestået; først derefter anvendes det vægtede gennemsnit og tærsklerne pr. dimension. Den samlede tærskel på 8.0 er en standardværdi i konfigurationen, ikke en observeret oversættelseskvalitet.

  2. Ture · omkostninger · kvoteNye forsøg · forbrugKørsel · vurdering: næste turGenerér · modelkaldOversættelsestur

    En oversættelse, der ikke består, genereres igen med den forrige oversættelse og kritik. Selv en hard gate-fejl kan først forsøges igen i stedet for at gå direkte til en person.

  3. Ture · omkostninger · kvoteNye forsøg · forbrugKørsel · vurdering: grænse · afbrydMenneskelig gennemgang

    Når turene slipper op, eller omkostningsloftet nås, færdiggøres jobbet som needs_review. Tilstanden finalized betyder, at behandlingen sluttede, ikke at en person godkendte det.

  4. Ture · omkostninger · kvoteNye forsøg · forbrugFejl · grænse: kvote · autentificeringKontrol af legitimation

    Et kvote- eller autentificeringssignal stopper forbruget og sætter needs_credential. Der skiftes ikke automatisk til en anden konto eller udbyder. Transportfejl uden stopsignal går tilbage til nye forsøg i BullMQ.

  5. Kontrol af legitimationKørsel · vurdering: manuel genoptagelseBullMQ · job-IDJobkø

    En operatør, der har kontrolleret legitimationsoplysningerne, genstarter eksplicit.

Gendannelse af hængende job

Gamle drafts deles efter årsag: mangler de i køen, sættes de i kø igen; er forsøgene opbrugt, går de til en menneskelig beslutning.

  1. Draft · fremdriftOversættelsestilstandObservation · rapport: hængende draftDrafts over 10 min · maks. 200Oprydning af hængende job

    Op til 200 kandidater, der har været drafts i over 10 minutter, læses med de ældste først. Forespørgslen tager ingen lås, og opdateringer og logs kører som separate sætninger, så dette beskrives ikke som en batch uden race conditions.

  2. Drafts over 10 min · maks. 200Oprydning af hængende jobKørsel · vurdering: under grænsenSammenlign køtilstandKøkontrol

    Med færre forsøg end grænsen (3) sammenlignes jobbet med køtilstandene active, waiting, delayed og prioritized. I koden kommer grenen for opbrugte forsøg før denne køkontrol.

  3. Sammenlign køtilstandKøkontrolKørsel · vurdering: sæt i kø igenBullMQ · job-IDJobkø

    Hvis jobbet ikke er i køen, sættes det i kø igen. API'et bruger ID'er med et forespørgselssuffiks, mens oprydningen søger efter segment- og sprog-ID, så den beskrives ikke som at ramme alle igangværende forespørgsler.

  4. Drafts over 10 min · maks. 200Oprydning af hængende jobKørsel · vurdering: resultat findesMenneskelig gennemgang

    Med alle 3 forsøg brugt og et oversættelsesresultat til stede går jobbet til needs_review.

  5. Drafts over 10 min · maks. 200Oprydning af hængende jobKørsel · vurdering: intet resultatKontrol af legitimation

    Med alle 3 forsøg brugt og intet resultat går jobbet til needs_credential.

Alle forbindelser med samme tykkelse. Vælg et flow for kun at fremhæve dets vej med nummererede trin.

  • Fuldt optrukket · retning for input, resultater og logs
  • Stiplet · kørsel, vurdering, anmodning
  • Lange prikker · observation og rapportering, adskilt fra vurdering
  • Korte streger · fejl, stop, grænse
  • Kraftig sort linje · det valgte flow; tal angiver rækkefølgen
  • Boks · kode- eller tilstandsgrænse, navngivet i overskriften
  • Indre chip · en komponent inden for grænsen
  • Prikket boks · uden for grænsen
  • Orange kontur · hvor en model træffer beslutninger
  • Generering · forbrug · færdiggørelse
  • Indgang · domsregler · oprydning
  • Kø · tilstand · logs
  • Registrering · køkontrol

Tegnet ud fra private implementerings- og udviklingslogs. Kundedata og kodestier vises ikke.

Én oprydning
26. maj 2026, én oprydningscyklus i udviklingsmiljøet: 200 kontrolleret, 106 tilstandsovergange, 2 sat i kø igen. En tilstandsovergang er ikke en vellykket oversættelse, og fordelingen af de 106 efter destinationstilstand er ikke registreret.
Hvorfor ikke præcis én gang
Poster skrives uden dubletter, men hvis et job kører igen efter et nedbrud, kan modelkald og deres omkostninger gentages. Grænsen for samtidighed gælder pr. proces, ikke for hele klyngen.
Dommens rækkevidde
At et gennemsnit ikke kan dække over en fejl i ordlisten, er en aggregeringsregel over rapporterede gates. Det beviser ikke, at alle forbudte termer findes, eller at kvaliteten er på modersmålsniveau.