precommitEU model bundle

Weights for precommitEU, a free, Apache-2.0 GenAI scanner for EU regulatory risks in source code.

Run the scanner and every model on infrastructure your organization controls. No external LLM API, subscription or per-scan licence fee is required. Once the scanner, llama.cpp runtime and this model bundle are installed, scans run without internet access, including in air-gapped environments. See the offline installation guide. Try the scanner locally on a 32 GB laptop, or use precommitEU ops to deploy Azure GPU runners for enterprise CI through Terraform or Pulumi. The ops deployment uses local inference and requires GitHub connectivity. You provide the compute; the scanner, weights and deployment code are free.

The scanner itself is a separate pure-Python package on PyPI (pip install precommiteu); this repository holds only the model files it runs. Two shared models split the work: orchestrator.gguf runs the orchestrator and the validator, and base.gguf runs the detector, with a small LoRA adapter per regulation swapped in for detection. Eight EU regulations are covered: GDPR, the EU AI Act, NIS2, DORA, the Cyber Resilience Act, the Digital Services Act, the Digital Markets Act and the Data Act.

precommitEU scanning a Python project for GDPR violations

A real scan, unedited: about 80 seconds on an M-series MacBook, played back at 5ร—. Replay it step by step at precommit.eu/try, including the cross-file lookup that turns a harmless-looking log line into a confirmed GDPR Art. 32 finding.

Confirmed findings quote code evidence. The adapter is stage one: it proposes candidates. A validator then has to locate the quoted evidence verbatim in the file, or the candidate is dropped. Confirmed findings cite the line. Candidates that fail validation are reported as advisories and never fail a build.

How the models are used

Role File Model
Detector base.gguf + <regulation>/detector-adapter.gguf Qwen2.5-Coder-7B-Instruct with one precommitEU LoRA adapter per regulation
Orchestrator orchestrator.gguf Qwen3.6-35B-A3B
Validator orchestrator.gguf Qwen3.6-35B-A3B

The detector proposes candidate violations. The orchestrator reads related files when one file is not enough to judge, and the validator confirms or rejects each candidate against the code.

Changes in 0.3.0

  • Adds orchestrator.gguf (Qwen3.6-35B-A3B, IQ4_XS, 16.5 GiB). The orchestrator and the validator run on it.
  • The detector is unchanged: base.gguf (Qwen2.5-Coder-7B-Instruct, Q4_K_M) with the same six LoRA adapters.
  • Scans need precommiteu 0.3.x, llama.cpp build 10158 or newer, 32 GB of RAM and about 23 GB of disk.
  • precommiteu 0.2.x keeps working from this repository: it downloads base.gguf and the adapters, and does not use orchestrator.gguf.

The deployment combination is scanner/action 0.3.2, this bundle at v0.3.0 (fe15487df95233aac4478f9a08e2fc12e8dda7f1), and precommitEU ops 0.2.0 for Azure GPU runners. Model and scanner version numbers are independent.

The larger validator reduces false alarms in some packs, at the cost of dedicated CI infrastructure. Standard GitHub-hosted runners are too small; GitHub Actions works with a self-hosted runner. A 32 GB laptop, including Apple Silicon, can still run the scanner locally. Ops provisions a T4 GPU runner through Terraform or Pulumi and documents measured timings and costs.

Detection quality

The 3 November 2026 evaluation used a built 0.3.0 wheel with these released weights. Results measure whether each file raised any confirmed finding; advisories are excluded.

Pack / dataset Precision Recall False-positive rate on clean cases
gdpr 92% 92% 8%
eu_ai_act 94% 64% 4%
eu_data_act 96% 92% 4%
cra_dma_nis2 100% 88% 0%
dsa 100% 92% 0%
dora 96% 88% 4%
All nine evaluated datasets 95.5% 85.7% 4%

The aggregate is 450 balanced synthetic case runs across nine datasets, including standalone CRA, DMA and NIS2 alongside the combined pack; there are 440 unique snippets. False alarms affected 9/225 clean cases, or 9/201 flagged cases (4.5%). One positive case did not complete: recall is 85.7% on completed positives, or 85.3% counting the failure as a miss. Exact article sets matched in 79.1% of all cases. All cases used the direct route, so this run does not measure cross-file reasoning or CI integration.

DSA and the combined CRA/DMA/NIS2 sample improved from the older README's 15% and 5% false-positive rates to 0%. GDPR worsened from 6% to 8%, DORA from 0% to 4%, and EU AI Act recall fell from 93% to 64%. The older results used different samples: this is not a controlled before/after experiment, and zero observed false alarms does not guarantee zero in production. See the evaluation method and counts.

The Zen of EU Code

  1. Put purpose before collection.
  2. Collect less than you could, and keep it for less time.
  3. Let people know what the system knows.
  4. Make consent a choice, not a trap.
  5. Give people working controls over their data.
  6. Protect what you keep, from design to update.
  7. Children deserve stronger defaults.
  8. Explain automated decisions before they become consequences.
  9. Build systems that fail safely, recover clearly, and report harm responsibly.
  10. Make switching, portability, and interoperability real.

Files

orchestrator.gguf: Qwen3.6-35B-A3B, IQ4_XS, 16.5 GiB. Runs the orchestrator and the validator for every regulation.

base.gguf: Qwen2.5-Coder-7B-Instruct, Q4_K_M, 4.36 GiB. Runs the detector; every adapter loads onto it.

--regulations value Regulation Adapter
gdpr General Data Protection Regulation gdpr/detector-adapter.gguf
eu_ai_act EU AI Act eu_ai_act/detector-adapter.gguf
eu_data_act EU Data Act eu_data_act/detector-adapter.gguf
dora Digital Operational Resilience Act dora/detector-adapter.gguf
dsa Digital Services Act dsa/detector-adapter.gguf
cra_dma_nis2 Cyber Resilience Act / DMA / NIS2 cra_dma_nis2/detector-adapter.gguf

Every adapter is 77 MiB. SHA256SUMS covers all eight files:

shasum -a 256 -c SHA256SUMS

Which adapters do I need?

Adapter Regulation Applies since Use it when your codeโ€ฆ
gdpr General Data Protection Regulation, Regulation (EU) 2016/679 25 May 2018 touches personal data: user records, auth, profiles, logging, exports, analytics
eu_ai_act Artificial Intelligence Act, Regulation (EU) 2024/1689 2 Aug 2026 (phased) builds, serves or calls AI models; automated decisions, biometrics
eu_data_act Data Act, Regulation (EU) 2023/2854 12 Sep 2025 is a connected/IoT product, or does data sharing, access requests, cloud switching
dora Digital Operational Resilience Act, Regulation (EU) 2022/2554 17 Jan 2025 belongs to a financial entity: payments, trading, ICT risk, incident reporting
dsa Digital Services Act, Regulation (EU) 2022/2065 17 Feb 2024 runs a platform with user content: moderation, recommenders, ads

cra_dma_nis2 is one adapter covering three related acts:

Regulation Applies since Use it when your codeโ€ฆ
CRA, Cyber Resilience Act, Regulation (EU) 2024/2847 11 Dec 2027 (reporting duties 11 Sep 2026) ships a product with digital elements: vulnerability handling, secure updates, SBOM
DMA, Digital Markets Act, Regulation (EU) 2022/1925 2 May 2023 belongs to a designated gatekeeper: interoperability, self-preferencing, data reuse
NIS2, Network and Information Systems Directive 2 (EU-wide cybersecurity), Directive (EU) 2022/2555 via national law, due 17 Oct 2024 runs an essential or important entity in one of 18 critical sectors: risk management, incident reporting

Everything above except NIS2 is a Regulation: it applies directly and identically in every member state from its date, with no national step. NIS2 is a Directive, so it binds each member state to legislate rather than applying on its own: what you comply with is your country's implementing act. Transposition was due 17 October 2024; most states have legislated, a few are still behind, so the detail varies by country.

The AI Act applies in stages: prohibitions and AI-literacy duties since 2 February 2025, general-purpose AI model obligations since 2 August 2025, most remaining provisions from 2 August 2026, and Article 6(1) high-risk duties from 2 August 2027.

gdpr is the sensible default for almost any product repo; the other five are opt-in when your sector or feature set matches.

Use each adapter only where its regulation applies. Every adapter is trained and evaluated on code its own regulation governs. Pointed at a codebase outside that scope it produces unreliable output, flagging code that is not a violation under that regulation. Loading all six is not more thorough: only noisier.

Download

pip install precommiteu==0.3.2 huggingface_hub

# everything, ~22.9 GB
hf download AlexandruGirlea/precommiteu-models --revision v0.3.0 --local-dir ~/.precommiteu/models

# or the shared models + one regulation, ~22.5 GB
hf download AlexandruGirlea/precommiteu-models base.gguf orchestrator.gguf gdpr/detector-adapter.gguf SHA256SUMS LICENSE.Apache-2.0.txt NOTICE --revision v0.3.0 --local-dir ~/.precommiteu/models

Install llama.cpp build b10158 or newer (on macOS, brew install llama.cpp), then:

export PRECOMMITEU_MODELS_DIR=~/.precommiteu/models
precommiteu scan src/

The directory names match the scanner's --regulations values; it resolves <models-dir>/<regulation>/detector-adapter.gguf. Full instructions in the installation guide.

Links

Runtime

Served by llama.cpp llama-server (build b10158+), which the scanner starts and stops itself. Every response is constrained by a formal grammar (GBNF), so the model can only produce the exact output shape the scanner expects. Runs on CPU, or faster with Metal on Apple Silicon and CUDA on NVIDIA GPUs.

32 GB of RAM is the practical minimum. A scan runs two servers side by side, one on orchestrator.gguf and one on base.gguf with a detector adapter. Measured peak is about 17.5 GiB and 6.3 GiB, so roughly 23.7 GiB together.

On top of the model files sits the context window: each server holds everything it has read so far in memory, at roughly 20 KiB per token on the orchestrator server and 56 KiB on the detector server. Halving the window with --n-ctx 16384 (the default is 32768) brings the pair down to about 22.6 GiB. On a machine with less than 32 GB the scan will swap to disk, or be killed for running out of memory.

The adapters are not general-purpose chat models. They are trained for one task, flagging candidate regulatory violations in source files, and they are used through the scanner, not directly.

Training

One LoRA fine-tune per regulation over base.gguf, trained in-house on a private labelled dataset. orchestrator.gguf is used as published, without fine-tuning. Quality is measured against held-out labelled data rather than standard code benchmarks.

Limitations

Output is a compliance signal, not legal advice. Confirmed findings with source: "precommiteu" are backed by verbatim code evidence; findings with source: "retrieval" cite a matched violation pattern instead and carry no quoted line; retrieval promotion is disabled in 0.3.x. Unconfirmed candidates are surfaced separately as advisories and should not gate a build. Coverage is limited to the articles in each regulation pack.

Disclaimer

These models are free and fully open source under the Apache License 2.0, and are provided as is, without warranty or condition of any kind, express or implied. Use is entirely at your own risk. There is no service level and no guarantee of accuracy or fitness for any purpose.

They produce a compliance signal, not legal advice: they can flag code that is not a violation and can miss violations that are present. No output establishes, certifies or evidences compliance with any regulation.

The author is not a lawyer and provides no legal, regulatory or compliance advice. These models do not replace legal analysis. To the maximum extent permitted by applicable law, Alexandru Girlea accepts no liability for any damages, losses, costs, regulatory outcome or misrepresentation arising from their use or from reliance on their output. Have findings reviewed by qualified legal counsel before acting on them.

License

Apache 2.0, for everything here: the adapters and the two quantized models.

base.gguf is derived from Qwen2.5-Coder-7B-Instruct (Copyright Alibaba Cloud / Qwen team, Apache-2.0), converted to GGUF and quantized to Q4_K_M with no other changes to the weights. orchestrator.gguf is derived from Qwen3.6-35B-A3B (Copyright Alibaba Cloud / Qwen team, Apache-2.0), converted to GGUF and quantized to IQ4_XS by Unsloth with no other changes to the weights. The adapters are derivative works trained by Alexandru Girlea and are released under the same licence. See NOTICE.

Downloads last month
141
GGUF
Model size
8B params
Architecture
qwen2
Hardware compatibility
Log In to add your hardware

We're not able to determine the quantization variants.

Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for AlexandruGirlea/precommiteu-models

Base model

Qwen/Qwen2.5-7B
Adapter
(829)
this model