Search by

kirschbaum-development / redactor-onnx

belisar

In-process named entity recognition for kirschbaum-development/redactor, running an ONNX model through TransformersPHP with no sidecar.

Package info

github.com/kirschbaum-development/redactor-onnx

pkg:composer/kirschbaum-development/redactor-onnx

Statistics

Installs: 2

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-09-14 14:52 UTC

This package is auto-updated.

Last update: 2026-09-14 15:54:29 UTC


README

Laravel Supported Versions MIT Licensed Latest Version on Packagist Application Testing Static Analysis Code Style

Redactor ONNX gives Kirschbaum Redactor an in-process named entity recogniser. It runs a token classification model through TransformersPHP inside the PHP worker, so the redactor can find names, places and organisations in prose with no sidecar to deploy and no network call to wait for.

The recogniser registers as the onnx driver. Everything else stays the redactor's: the gates that keep JSON and stack traces away from the model, the offset check, the circuit breaker, batching, operators and profiles.

Quick Start

Install the package, then download and load the model once so no job pays for it:

composer require kirschbaum-development/redactor-onnx
php artisan redactor:onnx:warm

Select the driver in any profile's recognition block in config/redactor.php:

'recognition' => [
    'enabled'  => true,
    'driver'   => 'onnx',
    'entities' => ['PERSON', 'LOCATION', 'ORGANIZATION'],
],

Then redact as usual:

use Kirschbaum\Redactor\Facades\Redactor;

Redactor::redact('Please call John Smith in Berlin about the invoice', 'exports');

// 'Please call [REDACTED] in [REDACTED] about the invoice'

How It Works

The model labels tokens, and the runtime reports no character offsets, so the recogniser finds each decoded token in the original text and folds the model's BIO labels into spans with exact offsets. Long texts are cut at whitespace into windows the model can hold in full, and every prose value the redactor gathers from a payload goes through the model in one batched call. Model labels such as PER are mapped to the names the redactor's profiles already use, such as PERSON.

The model loads on the first call and stays in memory, so the driver belongs in queue workers, Octane, exports and redactor:scan, where a process lives long enough to amortise the load.

Documentation

The full documentation lives in docs/:

Page What it covers
Getting Started Requirements, installation, selecting the driver, warming the model, and where to run it.
Configuration Every key in config/redactor-onnx.php with its type, default and environment variable.
How It Works Alignment of tokens to characters, windows, batching, labels and failures.
Models Choosing a model, tokenizer marks, memory and speed.
Testing Faking the classifier in your suite, the opt-in real-model test, the package's own conventions.

Requirements

  • PHP 8.3, 8.4 or 8.5 with the ffi extension
  • Laravel 12.x or 13.x
  • kirschbaum-development/redactor

Testing

composer test           # full suite, no model needed
composer test-coverage  # with the coverage floor enforced
composer lint           # Pint, Rector, PHPStan (level 10, no baseline)
composer preflight      # everything CI runs

See Testing for the opt-in test that downloads and runs the real model.

Changelog

See CHANGELOG.md.

License

MIT License. See LICENSE.md for details.