/** * @copyright Sister Software * @license AGPL-3.0 * @author Teffen Ellis, et al. * * `synth-po-box`: PO box / PMB / Apartado / BP synthesizer adapter. * * Consumes a JSONL stream of (locality, region, postcode, country) tuples — typically extracted * from existing corpus output (TIGER/NAD/BAN/WOF) — and emits synthetic PO box training rows. See * `@mailwoman/corpus/synthesizers/po-box` for the per-locale templates and number-noise logic. * * Why an adapter and not an augmenter: * * - Per USPS Pub 28 / DMM 508, a PO box delivery line is mutually exclusive with a street line. * Synthesizing PO boxes by mutating a street row would teach the model an invalid pattern. * The clean shape is: read just (locality, region, postcode, country) and produce a fresh * PO-box-shaped row. * - Per-DeepSeek (3-turn consult, 2026-05-28): PMB rows that COMBINE a street line with a PMB number * ARE valid (CMRA addresses). Those are produced when `pmbRatio > 0` AND the input tuple * carries a `street` field. */ import { type PoBoxBaseTuple } from "@mailwoman/corpus/synthesizers/po-box"; import type { CorpusAdapter } from "@mailwoman/corpus/types"; /** * Registry id for this adapter. Stamped into every row it emits, so a corpus record can be traced back to the dataset * it came from. */ export declare const SYNTH_PO_BOX_ADAPTER_ID = "synth-po-box"; /** * License for the synthetic PO-box rows. The output is generated, but it inherits the terms of the real tuples it is * derived from, so the attribution travels with it. */ export declare const SYNTH_PO_BOX_LICENSE = "Synthetic \u2014 derived from CC-BY / public-domain input tuples"; export interface PoBoxInputRow extends PoBoxBaseTuple { street?: string; houseNumber?: string; } export interface SynthPoBoxAdapterOptions { /** * How many PO box variants to emit per input tuple. Each variant picks a different leader (and possibly a different * number / noise level). Default 1. */ variantsPerInput?: number; /** * Probability (0..1) of emitting a PMB-with-street variant when both the input has a street and the locale supports * PMB. Default 0.15. */ pmbRatio?: number; /** * Deterministic seed for reproducible synthesis. Default Date.now(). */ seed?: number; /** * Probability (0..1), evaluated per input tuple, of ALSO emitting one US military/diplomatic PO-box row * (`PSC/CMR/Unit Box , APO/FPO/DPO AA/AE/AP `, #517). These rows are self-contained — they draw no * field from the input tuple, so military volume scales with the input stream size. Default 0 (off) — the adapter's * contract is "one row per input"; the corpus build recipe opts in to seed the rare-but-real military class without * changing the default. */ militaryRatio?: number; } export declare function createSynthPoBoxAdapter(opts?: SynthPoBoxAdapterOptions): CorpusAdapter; /** * The configured adapter instance registered with the corpus builder. */ export declare const synthPoBoxAdapter: CorpusAdapter; //# sourceMappingURL=adapter.d.ts.map