Model licences
The licence of every NER model OGuardAI can use, which permit commercial use, and how to substitute one you hold rights to
The detection sidecar runs third-party NER models. Those models carry their own licences, separate from OGuardAI's, and they are not uniform: some are MIT, several are CC-BY-SA-4.0, one is LGPLLR, two are GPL-3.0-only, and two forbid commercial use entirely.
The models below are DEFAULTS, not requirements. OGuardAI separates the policy engine from entity detection, so detection is a replaceable layer and nothing in the runtime depends on a particular model.
Four levels of replacement, each without a fork:
| Level | Typical case |
|---|---|
| A different model in the same engine | Your own fine-tune of a bundled engine |
| A different engine for one language | A language your own model handles better |
| Your own detection backend | A fine-tuned BERT or RoBERTa, Flair, Stanza, any HuggingFace model, or an in-house engine. Not limited to the engines we bundle |
| An external detection service | A detection system you already run and have already had approved |
The last level is the one that matters most here: with built-in pattern detection plus an external detector, no third-party model runs at all, and none of the licences on this page apply to that deployment. Configuration is in the plugin development guide.
When using third-party or custom models, you are responsible for ensuring you hold the necessary rights to use and distribute them.
The canonical, always-current inventory is THIRD-PARTY-MODELS.md in the repository. This page
summarises what an operator needs before deploying a language.
This page covers the NER models only. For the operating-system software the container images bundle, its licences, and the signed SBOM that inventories every component, see Third-party software in the container images.
Bundled in the detector image
These ship inside the detector image. English is served by GLiNER (urchade/gliner_medium-v2.1
with the microsoft/deberta-v3-base encoder), not by a spaCy model, so it is not part of the
language routing manifest below.
| Model | Licence | Commercial use |
|---|---|---|
urchade/gliner_medium-v2.1 | Apache-2.0 | yes |
microsoft/deberta-v3-base | MIT | yes |
en_core_web_sm | MIT | yes |
zh_core_web_sm | MIT | yes |
ja_core_news_sm | CC-BY-SA-4.0 | yes, attribution required |
Every bundled model is permissive or attribution class, so the shipped image is licence-clean: it conveys nothing copyleft or non-commercial.
GLiNER v0 and v1 were CC-BY-NC-4.0 and could not be used commercially. The pinned v2.1 is
Apache-2.0. Re-check whenever the pin moves.
How a language's model is enabled
A per-language spaCy model default-routes only when its licence class allows it. There are three tiers.
A language whose model is gated does not default-route until the operator accepts its licence. An unaccepted
gated model simply does not load: a request for that language is served by the default backend
(GLiNER in the shipped configuration) instead, or degrades to regex-only if that backend cannot serve
it, so no gated model default-routes without acceptance. Strict-backend mode turns a per-language route
that cannot be served into a hard error rather than a fallback. A GUARDAI_SPACY_MODELS override loads
exactly the model you name, on your own rights.
| Tier | Licence classes | What the operator must set |
|---|---|---|
| Default-routed | permissive, attribution | nothing; install the wheel and route the language to spaCy |
| Licence-gated | weak copyleft, copyleft | GUARDAI_ACCEPT_MODEL_LICENSES must list the model's SPDX id |
| Non-commercial | non-commercial | GUARDAI_ACCEPT_MODEL_LICENSES and GUARDAI_NONCOMMERCIAL_DEPLOYMENT=true |
GUARDAI_ACCEPT_MODEL_LICENSES is a JSON array of SPDX ids, for example ["GPL-3.0-only"]. Use the
exact SPDX id from the tables below. An outdated or shortened SPDX spelling does not match and the
model stays gated. On the default route, a gated language requested without the matching acceptance does not load the gated
model; the request is served by the default backend (GLiNER in the shipped configuration) instead, or
degrades to regex-only if that backend cannot serve it.
Default-routed models (permissive and attribution)
These route by default, with no licence acceptance. Most are not bundled in the image, so a deployment
that wants one installs the wheel and routes the language to the spaCy backend. Japanese
(ja_core_news_sm) is the exception: it already ships in the image (see the bundled table above).
| Language | Model | Licence | Commercial use |
|---|---|---|---|
| German | de_core_news_sm | MIT | yes |
| Russian | ru_core_news_sm | MIT | yes |
| Portuguese | pt_core_news_sm | CC-BY-SA-4.0 | yes, attribution and share-alike |
| Dutch | nl_core_news_sm | CC-BY-SA-4.0 | yes, attribution and share-alike |
| Romanian | ro_core_news_sm | CC-BY-SA-4.0 | yes, attribution and share-alike |
| Danish | da_core_news_sm | CC-BY-SA-4.0 | yes, attribution and share-alike |
| Swedish | sv_core_news_sm | CC-BY-SA-4.0 | yes, attribution and share-alike |
| Finnish | fi_core_news_sm | CC-BY-SA-4.0 | yes, attribution and share-alike |
| Korean | ko_core_news_sm | CC-BY-SA-4.0 | yes, attribution and share-alike |
| Japanese | ja_core_news_sm | CC-BY-SA-4.0 | yes, attribution and share-alike |
Chinese (zh_core_web_sm, MIT) is permissive too, and is one of the models bundled in the image
above.
Licence-gated models (require GUARDAI_ACCEPT_MODEL_LICENSES)
These do not route by default even when the wheel is installed. The operator must accept the licence by SPDX id before the model loads, which is why the shipped image conveys nothing copyleft.
| Language | Model | Licence | Commercial use |
|---|---|---|---|
| French | fr_core_news_sm | LGPLLR | yes, with conditions |
| Spanish | es_core_news_sm | GPL-3.0-only | strong copyleft, take advice before shipping |
| Polish | pl_core_news_sm | GPL-3.0-only | strong copyleft, take advice before shipping |
To enable Spanish or Polish: GUARDAI_ACCEPT_MODEL_LICENSES=["GPL-3.0-only"] (and install the
wheel). For French: GUARDAI_ACCEPT_MODEL_LICENSES=["LGPLLR"]. The sidecar keeps the model in a
separate process reached over HTTP, which is a more defensible arrangement than linking it into your
binary, but take advice before shipping a product that depends on them.
Non-commercial models (require acceptance and GUARDAI_NONCOMMERCIAL_DEPLOYMENT)
Italian and Greek default to CC-BY-NC-SA-3.0 models, which forbid commercial use. They default-route only when the operator both accepts the licence and asserts a non-commercial deployment, so a commercial deployment never loads one by accident.
| Language | Default model | Licence | Commercial use |
|---|---|---|---|
| Italian | it_core_news_sm | CC-BY-NC-SA-3.0 | no, non-commercial only |
| Greek | el_core_news_sm | CC-BY-NC-SA-3.0 | no, non-commercial only |
To enable them in a non-commercial deployment:
GUARDAI_ACCEPT_MODEL_LICENSES=["CC-BY-NC-SA-3.0"] together with
GUARDAI_NONCOMMERCIAL_DEPLOYMENT=true. Accepting the licence without the assertion is a
configuration error: it does not load the model, and both variables are required together.
Substituting a model
Point the routing table at a model you hold rights to. This is the supported path for Italian and Greek in a commercial deployment, and for anyone whose legal review rejects a default:
GUARDAI_SPACY_MODELS='{"it":"your_licensed_italian_model","el":"your_licensed_greek_model"}'The runtime does not care which model answers. Detection-quality claims for a substituted model are yours to establish: the capability surface binds a claim to the model revision it was measured on, so a swapped model reports no proven coverage until you supply benchmark evidence for it.
Checking a model yourself
Every spaCy pipeline records its licence in its own metadata, and that is the source of truth rather than any summary, including this page:
python -c "import spacy, json; print(json.dumps(spacy.load('xx_core_news_sm').meta, indent=2))" | grep -i licenseLicensing
What licence each part of OGuardAI carries, how the proprietary runtime is licensed, and which licences the models and dependencies bring with them
Third-party software in the container images
What operating-system software the OGuardAI container images bundle, how it is licensed, and the signed SBOM that inventories every component