@mailwoman/neural-weights-fr-fr 10.0.0 → 10.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE.md ADDED
@@ -0,0 +1,36 @@
1
+ # License — @mailwoman/neural-weights-fr-fr
2
+
3
+ Generated by `mwops release write-rights-files` from package.json and model-card.json. Edit the generator or those files, never this one.
4
+
5
+ ## The terms Sister Software grants
6
+
7
+ This package is distributed under `AGPL-3.0-only OR LicenseRef-Commercial`.
8
+
9
+ Under the AGPL-3.0-only branch, three obligations attach: keep the copyright notices, license a
10
+ modified copy under the same terms, and offer corresponding source to people who use a modified copy
11
+ over a network (section 13). Under a commercial agreement, the source offer and the share-alike
12
+ condition do not apply to the code and model artifacts Sister Software authors.
13
+
14
+ - Open-source terms: https://github.com/sister-software/mailwoman/blob/main/LICENSE.md
15
+ - Commercial terms, as executed at checkout: https://mailwoman.ai/license/terms/commercial-2026-10
16
+ - Commercial terms, as a reference template that does not itself execute:
17
+ https://github.com/sister-software/mailwoman/blob/main/COMMERCIAL-LICENSE.md
18
+
19
+ ## What the commercial grant does not cover
20
+
21
+ Section 2 of the commercial agreement limits the grant to the code and model artifacts Sister
22
+ Software authors. It does not extend to third-party components distributed with Mailwoman, which
23
+ stay under their own licenses. Any attribution or share-alike obligation attaching to those
24
+ components continues to apply and is not waived or relicensed by a commercial agreement.
25
+
26
+ ## Where the sources are recorded
27
+
28
+ `PROVENANCE.json` in this package records, per artifact, what the repository holds about its
29
+ inputs and which questions it cannot answer. Read it as the record it is: a package with no recorded
30
+ training attribution is a package whose model card records none, which is not the same as a package
31
+ with no attributable inputs. No artifact in this package is recorded as cleared for any particular
32
+ use.
33
+
34
+ `THIRD_PARTY_NOTICES.md` in the repository lists the components Mailwoman distributes and the terms
35
+ each one carries. Reference data an operator downloads separately carries the terms of whoever
36
+ published it, and nothing here states what those are.
@@ -0,0 +1,125 @@
1
+ {
2
+ "$comment": "Generated by `mwops release write-rights-files` from package.json and model-card.json. Edit the generator or those files, never this one.",
3
+ "package": "@mailwoman/neural-weights-fr-fr",
4
+ "package_version": "10.0.0",
5
+ "license": "AGPL-3.0-only OR LicenseRef-Commercial",
6
+ "model_card_version": "6.5.0",
7
+ "version_series": "overlay",
8
+ "version_series_meaning": "This package is a data-only overlay, and model_card_version names this overlay's own artifacts. The model graph its rows decode through is the one base_weights names, at that package's own model_card_version. Neither number is package_version, which moves in lockstep across every mailwoman workspace on every release.",
9
+ "base_weights": "@mailwoman/neural-weights-en-us",
10
+ "inherited_lineage": {
11
+ "package": "@mailwoman/neural-weights-en-us",
12
+ "package_version": "10.0.0",
13
+ "model_card_version": "9.1.0",
14
+ "chain": ["@mailwoman/neural-weights-fr-fr", "@mailwoman/neural-weights-en-us"],
15
+ "note": "These entries are @mailwoman/neural-weights-en-us's record of what its model graph was trained on. This package ships no graph and contributed none of these rows. Read them as the base's lineage rather than as a claim about this package's own artifacts, which are listed under artifacts and attributed under training_attribution.",
16
+ "attribution": [
17
+ {
18
+ "text": "HM Land Registry — Price Paid Data (OGL v3.0): the `synth-gb-v1` training extract (800,000 rows) NEW in 6.7.0. Crown copyright, attribution required. The GB placetype-pair index is built from the same source and ships in `neural-weights-en-gb`, whose own card carries its attribution.",
19
+ "license_named": "OGL v3.0"
20
+ },
21
+ {
22
+ "text": "LINZ-derived OpenAddresses NZ (CC-BY 4.0): the `synth-nz-v2` training extract (800,000 rows) NEW in 6.7.0.",
23
+ "license_named": "CC-BY 4.0"
24
+ },
25
+ {
26
+ "text": "OpenAddresses ES tuples (CC-BY per OA source): the `synth-es-pedania-v1` training extract (800,000 rows, below-municipio pedanía place names) NEW in 6.7.0.",
27
+ "license_named": "CC-BY per OA source"
28
+ },
29
+ {
30
+ "text": "BAN — Base Adresse Nationale (DINUM / IGN, Licence Ouverte 2.0): the `synth-fr-lieudit-v1` training extract (`nom_ld` lieu-dit field) NEW in 6.7.0, additional to the existing `synth-fr-fragment` extract (144,865 rows, 6.4.0).",
31
+ "license_named": "DINUM / IGN, Licence Ouverte 2.0"
32
+ },
33
+ {
34
+ "text": "Overture Maps Foundation — Addresses theme (per-country register license; Overture declares no identifier of its own for this theme, so the terms are the upstream register's): the `overture-latam` CA/MX training extract (456,230 rows, 6.6.0). Attribution-only, not share-alike. Read 2026-09-25 from https://docs.overturemaps.org/attribution/.",
35
+ "license_named": "456,230 rows, 6.6.0"
36
+ },
37
+ {
38
+ "text": "OpenAddresses CZ — ČÚZK RÚIAN (CC-BY 4.0): tokenizer-splice training text + the oa-cz coord eval sets",
39
+ "license_named": "CC-BY 4.0"
40
+ },
41
+ {
42
+ "text": "OpenAddresses PL — GUGiK / PRG (public, BDOT-derived): tokenizer-splice training text + the oa-pl coord eval sets",
43
+ "license_named": null
44
+ },
45
+ {
46
+ "text": "OpenAddresses SK — MINV/ZBGIS (CC-0/CC-BY per OA source): oa-sk coord eval set (free-rider validation)",
47
+ "license_named": "CC-0/CC-BY per OA source"
48
+ },
49
+ {
50
+ "text": "OpenAddresses SI — GURS (CC-BY per OA source): oa-si coord eval set (free-rider validation)",
51
+ "license_named": "CC-BY per OA source"
52
+ },
53
+ {
54
+ "text": "See THIRD_PARTY_NOTICES.md for the standing OpenAddresses / GeoNames / WOF attribution.",
55
+ "license_named": null
56
+ }
57
+ ],
58
+ "unresolved": null
59
+ },
60
+ "artifacts": [
61
+ {
62
+ "path": "postcode-fr.bin",
63
+ "role": "postcode-binary",
64
+ "md5": null,
65
+ "digest": "unrecorded"
66
+ },
67
+ {
68
+ "path": "pair-index-fr.bin",
69
+ "role": "placetype-pair-index",
70
+ "md5": null,
71
+ "digest": "unrecorded"
72
+ },
73
+ {
74
+ "path": "fst-fr-fr.bin",
75
+ "role": "gazetteer-fst",
76
+ "md5": null,
77
+ "digest": "unrecorded"
78
+ },
79
+ {
80
+ "path": "fst-street-morphology.bin",
81
+ "role": "gazetteer-fst",
82
+ "md5": null,
83
+ "digest": "unrecorded"
84
+ },
85
+ {
86
+ "path": "anchor-lexicon-v1.json",
87
+ "role": "lexicon",
88
+ "md5": null,
89
+ "digest": "unrecorded"
90
+ },
91
+ {
92
+ "path": "locality-surface-lexicon-v7.json",
93
+ "role": "lexicon",
94
+ "md5": null,
95
+ "digest": "unrecorded"
96
+ },
97
+ {
98
+ "path": "street-type-lexicon-v3.json",
99
+ "role": "lexicon",
100
+ "md5": null,
101
+ "digest": "unrecorded"
102
+ },
103
+ {
104
+ "path": "country-surface-lexicon-v1.json",
105
+ "role": "lexicon",
106
+ "md5": null,
107
+ "digest": "unrecorded"
108
+ }
109
+ ],
110
+ "model_graph": null,
111
+ "training_attribution": {
112
+ "status": "none-recorded-in-this-package",
113
+ "entries": [],
114
+ "by_use": {}
115
+ },
116
+ "attribution_recorded_in_another_package": [],
117
+ "corpus_version": "v257 fragment-campaign corpus (extract-v5) re-tokenized through v0.9.0-multisplice; span-boundary aux head from BIO labels.",
118
+ "effective_training_sources": null,
119
+ "tokenizer_version": "0.9.0-multisplice",
120
+ "unresolved": [
121
+ "No digest is recorded for 8 of 8 declared artifacts: postcode-fr.bin, pair-index-fr.bin, fst-fr-fr.bin, fst-street-morphology.bin, anchor-lexicon-v1.json, locality-surface-lexicon-v7.json, street-type-lexicon-v3.json, country-surface-lexicon-v1.json. An unrecorded digest is not a verified one.",
122
+ "This package's model card records no training attribution of its own. It ships 8 artifacts and no model graph, so its own inputs are unattributed here while the 10 entries under inherited_lineage describe @mailwoman/neural-weights-en-us's graph.",
123
+ "Which records trained the model this package ships or inherits is unresolved. `buildCorpus` writes a frozen `TRAINING_SOURCES.json` naming every source that contributed and under which terms, `effective-manifest.run.ts` derives from it and an `audit_epoch_mixture` output what one config's epoch drew, and no released model was built from a corpus carrying either. The corpus named above is the recipe's corpus rather than a record of what reached the model."
124
+ ]
125
+ }
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
- license: agpl-3.0
2
+ license: AGPL-3.0
3
3
  language:
4
4
  - fr
5
5
  library_name: onnx
@@ -50,7 +50,7 @@ Mailwoman is a **calibrated, retrieval-augmented sequence labeler over a
50
50
  microlanguage** — coupled to a gazetteer that resolves its output to
51
51
  coordinates. This bundle is the sequence-labeler half: a small transformer
52
52
  encoder doing BIO token classification over the address schema. It is not an LLM
53
- and nothing about it is generative; for a closed label set over short strings,
53
+ and none of it is generative; for a closed label set over short strings,
54
54
  boring NER is a feature.
55
55
 
56
56
  The design splits the problem in two: **the model learns the grammar, the
@@ -65,27 +65,27 @@ Knowledge informs; it never overrides.
65
65
 
66
66
  ## Intended use
67
67
 
68
- Parsing free-text French postal addresses into structured components
68
+ The model parses free-text French postal addresses into structured components
69
69
  (country, region, locality, dependent_locality, postcode, subregion, cedex,
70
70
  venue, street, house_number) for **geocoding** — resolving a parsed address to
71
71
  coordinates via a gazetteer/resolver. The model is the parsing front-end of that
72
- pipeline, not a standalone geocoder.
72
+ pipeline rather than a standalone geocoder.
73
73
 
74
74
  ## Ship-config requirement (read before using)
75
75
 
76
76
  The Mailwoman model expects the soft anchor + gazetteer channels fed at
77
- inference. Running it with those channels off is out-of-distribution and silently
77
+ inference. A run with those channels off is out-of-distribution and silently
78
78
  collapses the admin tags (country/region/locality/postcode) — an anchor-off
79
79
  metric on an anchor-trained model is systematically misleading. Construct the
80
80
  scorer through `@mailwoman/neural`'s `createScorer` (the canonical
81
- `ProductionScorer`), which reads the bundle's `requires`/channel contract and
81
+ `ProductionScorer`), which reads the bundle's `requires`/channel interface and
82
82
  **fails closed** if a declared channel isn't fed. Do not hand-wire the raw ONNX
83
83
  session with the anchor input zero-filled. Every eval here is
84
84
  **anchor-on**.
85
85
 
86
86
  ## Evaluation
87
87
 
88
- We grade the **assembled coordinate** (the resolved place), not raw label-F1 in
88
+ We grade the **assembled coordinate** (the resolved place) rather than raw label-F1 in
89
89
  isolation. For FR, the model resolves addresses well when given the correct
90
90
  default country (the gazetteer holds ~114k FR places); on a real FR sample the
91
91
  neural front-end out-parses the rules baseline it replaces on locality-match.
@@ -115,7 +115,7 @@ Mailwoman confidences are isotonic-calibrated (PAVA) against held-out data and
115
115
  applied **opt-in** via `@mailwoman/core`'s `createCalibrator`; default parse
116
116
  output is byte-stable when calibration is omitted.
117
117
 
118
- ## Training
118
+ ## Train
119
119
 
120
120
  From-scratch (no pretrained base) on an NVIDIA A100 (Modal cloud), CE loss only
121
121
  (the dual CRF loss diverged and was retired; CRF is inference-only Viterbi). The
@@ -136,8 +136,8 @@ card carries the full corpus + recipe provenance.
136
136
 
137
137
  ## License & links
138
138
 
139
- - **License:** [AGPL-3.0-only](https://www.gnu.org/licenses/agpl-3.0.html).
139
+ - **License:** [AGPL-3.0-only](https://www.gnu.org/licenses/AGPL-3.0.html).
140
140
  - **Docs & concepts:** https://mailwoman.ai
141
141
  - **Loader / scorer API:** `@mailwoman/neural` (`createScorer`).
142
- - The functional contract for this bundle is `model-card.json`; this `README.md`
142
+ - The functional interface for this bundle is `model-card.json`; this `README.md`
143
143
  is the HuggingFace-facing card.
package/model-card.json CHANGED
@@ -280,7 +280,7 @@
280
280
  "md5": "(staged at release time — see $comment_md5)",
281
281
  "$comment_pix2": "PIX2 (schema 3, 2026-08-04): every record now carries the PARENT's ComponentTag alongside the child's — +1 byte per pair, pair COUNT unchanged. For FR the recorded parent tag is always `locality`: BAN's parent surface is `nom_commune`, the commune, which is the French postal locality line. Schema 1 and 2 binaries are refused; the artifact must be rebuilt.",
282
282
  "delta_calibration": "δ=10, transitionBeta=5, parentDelta=5 (whole-edge parent bias, #46 — the record's own parentTag gets +5 over the parent window). FR is the leg that CAUGHT that mechanism's one real defect: biasing the parent's whole comma segment put the postcode inside `locality` and took fr-lieudit-golden.jsonl from 96.3% to 0.0% at δ≥6, invisible at δ=4. Fixed by scoping the parent write to the probe key's pieces; FR then held 77/80 at every δ through 20. See docs/records/evals/2026-08-04-pix1-whole-edge-verdict.md. The δ/β pair is inherited from the GB calibration, per R5's finding that the classifier's dependent_locality deficit is uniform across locales rather than GB-specific. The R6 bars were measured at exactly that pair.",
283
- "country_check": "hard-blocked on the header's country (fr).",
283
+ "country_check": "hard-enforced: applies only when the header's country matches (fr).",
284
284
  "not_committed": "derived artifact, .gitignore'd — rebuilt via `mailwoman gazetteer pair-index --out neural-weights-fr-fr --country fr --delta 10 --transition-beta 5 --ban-dir <corpus/sources/ban>`",
285
285
  "required_decode_fixes": "This artifact is INERT without two locale-general probe-chain fixes that shipped alongside it: a LEADING postcode strip on parent-candidate keys (France writes '12210 Montpeyroux'; the probe previously stripped only trailing postcodes, the Anglo/NZ convention) and NEWLINE as a segment boundary (computeGroupSegments scanned for commas only, so multi-line addresses collapsed to one segment and the segment path went structurally inert). With the artifact but without them the golden board stayed at 0/80.",
286
286
  "$comment_md5": "REPRODUCIBILITY: a PIX1 header embeds `buildDate`, so a rebuild from identical sources produces different bytes and a different md5. This md5 therefore identifies the artifact STAGED TO HUGGING FACE for this release — it is a provenance record of the shipped bytes, NOT a check a local rebuild can reproduce. A mismatch after rebuilding is expected and is not corruption; verify pair COUNT and header delta/beta instead.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mailwoman/neural-weights-fr-fr",
3
- "version": "10.0.0",
3
+ "version": "10.2.0",
4
4
  "description": "Mailwoman neural-classifier weights for locale 'fr-fr'. Data-only overlay — shares the base model.onnx + tokenizer.model from @mailwoman/neural-weights-en-us (they are byte-identical); ships only the fr-specific data siblings. Loaded by @mailwoman/neural at runtime.",
5
5
  "license": "AGPL-3.0-only OR LicenseRef-Commercial",
6
6
  "repository": {
@@ -10,6 +10,8 @@
10
10
  },
11
11
  "files": [
12
12
  "model-card.json",
13
+ "LICENSE.md",
14
+ "PROVENANCE.json",
13
15
  "postcode-fr.bin",
14
16
  "pair-index-fr.bin",
15
17
  "fst-fr-fr.bin",
@@ -30,13 +32,6 @@
30
32
  "!scripts/**",
31
33
  "!test/**"
32
34
  ],
33
- "imports": {
34
- "#*": {
35
- "types": "./out/*.d.ts",
36
- "node": "./out/*.js",
37
- "default": "./out/*.js"
38
- }
39
- },
40
35
  "exports": {
41
36
  "./*": "./*"
42
37
  },
@@ -44,21 +39,14 @@
44
39
  "access": "public",
45
40
  "exports": {
46
41
  "./*": "./*"
47
- },
48
- "imports": {
49
- "#*": {
50
- "types": "./out/*.d.ts",
51
- "node": "./out/*.js",
52
- "default": "./out/*.js"
53
- }
54
42
  }
55
43
  },
56
44
  "dependencies": {
57
- "@mailwoman/neural-weights-en-us": "10.0.0"
45
+ "@mailwoman/neural-weights-en-us": "10.2.0"
58
46
  },
59
47
  "devDependencies": {
60
- "@mailwoman/core": "10.0.0",
61
- "@mailwoman/resolver-wof-sqlite": "10.0.0"
48
+ "@mailwoman/core": "10.2.0",
49
+ "@mailwoman/resolver-wof-sqlite": "10.2.0"
62
50
  },
63
51
  "mailwoman": {
64
52
  "baseWeights": "@mailwoman/neural-weights-en-us"