OGuardAI
Guides

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:

LevelTypical case
A different model in the same engineYour own fine-tune of a bundled engine
A different engine for one languageA language your own model handles better
Your own detection backendA 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 serviceA 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.

ModelLicenceCommercial use
urchade/gliner_medium-v2.1Apache-2.0yes
microsoft/deberta-v3-baseMITyes
en_core_web_smMITyes
zh_core_web_smMITyes
ja_core_news_smCC-BY-SA-4.0yes, 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.

TierLicence classesWhat the operator must set
Default-routedpermissive, attributionnothing; install the wheel and route the language to spaCy
Licence-gatedweak copyleft, copyleftGUARDAI_ACCEPT_MODEL_LICENSES must list the model's SPDX id
Non-commercialnon-commercialGUARDAI_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).

LanguageModelLicenceCommercial use
Germande_core_news_smMITyes
Russianru_core_news_smMITyes
Portuguesept_core_news_smCC-BY-SA-4.0yes, attribution and share-alike
Dutchnl_core_news_smCC-BY-SA-4.0yes, attribution and share-alike
Romanianro_core_news_smCC-BY-SA-4.0yes, attribution and share-alike
Danishda_core_news_smCC-BY-SA-4.0yes, attribution and share-alike
Swedishsv_core_news_smCC-BY-SA-4.0yes, attribution and share-alike
Finnishfi_core_news_smCC-BY-SA-4.0yes, attribution and share-alike
Koreanko_core_news_smCC-BY-SA-4.0yes, attribution and share-alike
Japaneseja_core_news_smCC-BY-SA-4.0yes, 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.

LanguageModelLicenceCommercial use
Frenchfr_core_news_smLGPLLRyes, with conditions
Spanishes_core_news_smGPL-3.0-onlystrong copyleft, take advice before shipping
Polishpl_core_news_smGPL-3.0-onlystrong 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.

LanguageDefault modelLicenceCommercial use
Italianit_core_news_smCC-BY-NC-SA-3.0no, non-commercial only
Greekel_core_news_smCC-BY-NC-SA-3.0no, 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 license