@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 +36 -0
- package/PROVENANCE.json +125 -0
- package/README.md +10 -10
- package/model-card.json +1 -1
- package/package.json +6 -18
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.
|
package/PROVENANCE.json
ADDED
|
@@ -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:
|
|
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
|
|
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
|
-
|
|
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
|
|
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.
|
|
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
|
|
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)
|
|
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
|
-
##
|
|
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/
|
|
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
|
|
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-
|
|
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.
|
|
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.
|
|
45
|
+
"@mailwoman/neural-weights-en-us": "10.2.0"
|
|
58
46
|
},
|
|
59
47
|
"devDependencies": {
|
|
60
|
-
"@mailwoman/core": "10.
|
|
61
|
-
"@mailwoman/resolver-wof-sqlite": "10.
|
|
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"
|