MUNICIPAL REQUESTS · SELF-HOSTED · MADE IN EUROPE

Auto-sort the waste requests.
Escalate everything else.

mtlm-router reads each incoming citizen request and returns a typed route — collecte OM, dépôt illicite, dotation de bacs, déchèterie… — or a calibrated escalate when it isn't sure. On-prem, on CPU, in ~200ms. Nothing leaves the collectivité's network.

79%
holdout accuracy
Measured on a real production export: 6,402 labeled municipal requests, 15 routes.
~0
confident misroutes
What it doesn't know, it escalates — it never silently sends a request to the wrong service.
7.8MB
the whole product
One self-contained tarball. Untar, run, route. No cloud, no GPU, no per-request cost.

What a collectivité gets

Automatic routing

Clear requests go straight to the right service — collecte, dépôt sauvage, colonnes d'apport, compostage, positionnement de bacs. The obvious half of the queue empties itself.

Safe abstention

Ambiguous, off-topic or out-of-scope requests (état civil, passeports, factures) are escalated to a human instead of being guessed. A misrouted signalement is a citizen complaint — the system refuses rather than improvises.

Trained on your data

Each collectivité gets its own head — a ~19KB file trained on their labeled export, in hours. Your vocabulary, your routes, your edge cases.

Sovereign by design

Runs on a VM inside your network. Citizen request text never transits a hosted LLM. Flat cost — no inference billing per request.

Honest scope

  • ✓ Agent-transcribed or picklist-shaped requests route automatically at high confidence.
  • ✓ Near-domain out-of-scope requests (mailbox vandalism, passports, facility hours) escalate confidently.
  • ! Free-form citizen phrasing tends to abstain rather than route — the system removes the clear traffic, not the hard cases.
  • ! Overlapping source labels (collecte OM vs sélective) cap accuracy — that is a taxonomy problem, fixable with a cleaner label set.

We publish holdout and live-eval numbers side by side. If a deployment doesn't hold up on your real traffic, we say so.

For software vendors

Signalement apps already market "IA triage" — most of it is a hosted LLM call per citizen report. mtlm-router is the engine you embed instead: a typed, abstaining classifier you can white-label, deploy at a client's site, and sell under your own pricing model.

Embed it behind your portail usager: one POST to /v1/route, one JSON decision back. Your app keeps the UI; ours makes the call.

$ curl localhost:8097/v1/route \
    -d '{"messages":[{"role":"user","content":"Depot illicite rue des Lilas"}]}'
{"route":"depot_illicite","confidence":0.92,"action":"tool_call"}

Try it on your own requests.

The demo appliance is a 7.8MB tarball — a dev poste can run it in under a minute. Send us a labeled export and we train a head on your routes; the first two trainings are on us.