
Cotton
Translation workflow
Genererede oversættelser gøres til resultater, der kan gennemgås.
En oversættelsesarbejdsgang til spildialog.
Cotton vocabulary
- prompt layers
- glossary
- generation
- revision
- judge
- hard gate
- score
- intake
- checkpoint
- spend control
- stale sweep
- approval
- correction
- 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.
Registrering → indgang
Sættes i kø efter commit til databasen; en worker låser rækken, kontrollerer forsøget og opretter draften.
Kilde · målsprogData: kildeSæt i kø efter commit
API · jobregistreringKildesegmenter og projektets målsprog gemmes i databasen. Kundedata vises ikke.
Sæt i kø efter commit
API · 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.
BullMQ · job-ID
JobkøKørsel · vurdering: lever jobRækkelås · kontrol af forsøgIndgang til jobBullMQ overdrager jobbet asynkront til en worker.
Rækkelås · kontrol af forsøg
Indgang til jobData: fremdriftsrækkeDraft · fremdriftOversættelsestilstandInden 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.
Rækkelås · kontrol af forsøg
Indgang til jobKørsel · vurdering: forsøg tilladtGenerér · modelkaldOversættelsesturAntallet 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.
Workspace-ordliste
Ordliste · kontekstData: ordlisteGenerér · modelkaldOversættelsesturWorkspace-ordlisten og konteksten slås op og gives videre til genereringen.
Workspace-ordliste
Ordliste · kontekstData: samme ordlisteKald til bedømmermodel · parsingOversættelsesturVurderingen får de samme begrænsninger fra ordlisten.
Generér · modelkald
OversættelsesturData: Tx1 · oversættelseRækker for oversættelse · vurderingOversættelsestilstandModellen 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.
Kald til bedømmermodel · parsing
OversættelsesturData: Tx2 · vurderingRækker for oversættelse · vurderingOversættelsestilstandBedø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.
Kald til bedømmermodel · parsing
OversættelsesturData: scorer · gatesHard gate · vægtet gennemsnitDomsreglerBedømmermodellens svar parses til scorer pr. dimension og gate-resultater. Om ordlisten blev overholdt, er det bedømmermodellen, der rapporterer.
Hard gate · vægtet gennemsnit
DomsreglerKørsel · vurdering: domTure · omkostninger · kvoteNye forsøg · forbrugEnhver 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.
Ture · omkostninger · kvote
Nye forsøg · forbrugKørsel · vurdering: passAfsluttende transaktionFærdiggørelseEn bestået oversættelse færdiggøres som translated.
Afsluttende transaktion
FærdiggørelseData: endelig postTilstand · kaldlogOversættelsestilstandKandidat, 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.
Hard gate · vægtet gennemsnit
DomsreglerKørsel · vurdering: domTure · omkostninger · kvoteNye forsøg · forbrugEnhver 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.
Ture · omkostninger · kvote
Nye forsøg · forbrugKørsel · vurdering: næste turGenerér · modelkaldOversættelsesturEn 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.
Ture · omkostninger · kvote
Nye forsøg · forbrugKørsel · vurdering: grænse · afbrydMenneskelig gennemgangNå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.
Ture · omkostninger · kvote
Nye forsøg · forbrugFejl · grænse: kvote · autentificeringKontrol af legitimationEt 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.
Kontrol af legitimationKørsel · vurdering: manuel genoptagelseBullMQ · job-ID
Jobkø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.
Draft · fremdrift
OversættelsestilstandObservation · rapport: hængende draftDrafts over 10 min · maks. 200Oprydning af hængende jobOp 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.
Drafts over 10 min · maks. 200
Oprydning af hængende jobKørsel · vurdering: under grænsenSammenlign køtilstandKøkontrolMed 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.
Sammenlign køtilstand
Kø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.
Drafts over 10 min · maks. 200
Oprydning af hængende jobKørsel · vurdering: resultat findesMenneskelig gennemgangMed alle 3 forsøg brugt og et oversættelsesresultat til stede går jobbet til needs_review.
Drafts over 10 min · maks. 200
Oprydning af hængende jobKørsel · vurdering: intet resultatKontrol af legitimationMed 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.