madewithlaya

Catalog / Documents & data

0080GitHub

lidarr-decision-import: resolve Lidarr's stuck imports with Laya instead of an LLM

Companion service that reads Lidarr's manual-import queue, scores every candidate release and track in one pass, and picks the right Single/EP/Album with calibrated probabilities.

Open source ↗ github.comcostfree, localtime-
JonnyKreng/lidarr-decision-importREADME ↗
# lidarr-decision-import

A companion service for [Lidarr](https://lidarr.audio/) that resolves imports
Lidarr's own matcher gave up on - especially the case where a song was released
more than once (a standalone **Single**, an **EP**, and later a full **Album**)
and Lidarr can't tell which one a downloaded file actually belongs to.

It resolves those files with a **non-autoregressive decision model** rather than
a generative LLM. The model reads the file evidence and scores every candidate
release/track in a single forward pass, returning calibrated probabilities - so
there is no text generation, nothing to JSON-parse, and no hallucinated
confidence. This project uses [Laya](https://pypi.org/project/laya/), a
ModernBERT-based System 1 decision engine trained with reinforcement learning
against strictly proper scoring rules (RLCD).

## Why this isn't a "real" Lidarr plugin

Lidarr does have a plugin system (the `plugins` branch), but it only extends
**indexers**, **download clients**, and **notification connections** - it has no
extension point inside the core import/matching engine, which is exactly the part
that needs to change here. So this runs as a separate process that talks to Lidarr
over its REST API instead: it reads `/api/v1/manualimport`, asks the decision
model to disambiguate, and (optionally) submits the result back via the same
Manual Import API the Lidarr UI itself uses. No Lidarr branch switch required,
nothing installed into Lidarr itself.

## The workflow

**`resolve`** - polls Lidarr for anything sitting in Manual Import limbo. For each
file, it pulls every album/release/track for that artist (not just the one Lidarr
guessed), finds tracks with a similar title, and hands the decision model a
side-by-side comparison: which Single/EP/Album release does

Also filed under Documents & data

  1. 0104

    zero-shot-ie-bench: GLiNER 2.5, GLiFormer, GLiClass, Laya, Von and Jev in one web UI

    Seven zero-shot extraction and classification families demoed, benchmarked and cross-compared, with sizes, licences and costs in one table.

    @umstek · Documents & data · free for the local rows

  2. 0103

    Zero-shot benchmark: Laya's advertised win over Jev does not reproduce on four datasets

    Frozen protocol, raw predictions, calibration and latency for Jev 1.13, PrismNLI-0.4B and Laya. Laya ties Jev on dair-ai/emotion and trails by 10–33 points elsewhere.

    @elcronos · Documents & data

  3. 0102

    jevbench: Jev vs GPT-5-mini, Claude Sonnet 5, fine-tuned DistilBERT, BART NLI and Laya

    Six classifiers over SST-2, AG News and more, reporting accuracy, macro-F1, ECE, p50/p95 latency, throughput and cost side by side. Laya runs locally on MPS or CPU.

    @dhruvmehra · Documents & data · $0 for the local rows

  4. 0098

    Agentic GraphRAG over S&P 10-Ks with Laya as a shadow decision engine beside Jev

    Anthony Alcaraz's talk demo routes typed decisions through Jev and shows Laya's answers beside them. On the TSMC run Laya rejected every true claim; that's the point.

    @AnthonyAlcaraz · Documents & data · free (Laya shadow); Bedrock for reasoning