Transaction Decider

A bank record goes in, a budget category comes out. Jev gave me the idea: the model never writes a sentence. It reads the record once, scores all 17 categories in that single pass, and returns the best one. So it cannot invent a category that is not on the list, and it takes the same time whether you offer two categories or twenty.

It runs on my laptop behind a tunnel, so please go easy on it. Nothing you type is stored.

Qwen3-4B + budget LoRA, merged, 7.5 GB bf16 · limits: 1 field / 10 records / 26 choices / 4000 chars · rate limit: 25 records per 10s, 100 per minute

Input

Leave a blank line between records to send up to 10 of them in one call.

One per line, 2 to 26. Leave them alone and the model answers against the trained budget categories. Change them and it answers against yours, measured at 87% on AG News and 46% on emotion, two public sets it never saw. The confidence is noticeably less honest off the trained categories, so treat it as a direction rather than a number.

Answer

Pick an example, or write your own.

    curl

    No key, no sign-up. This is exactly the request the panel above sends, and it changes as you edit.

    FieldTypeDefault
    inputstring or listrequiredWhat to judge. Up to 4000 characters. Send a list of up to 10 records to score them in one call; the answers come back as a list in the same order.
    categorieslistthe trained 17Your own categories, 2 to 26 of them.

    What is running

    Base model
    Qwen3-4B, bf16
    Adaptation
    LoRA, rank 16, alpha 32, 7 projections
    Training data
    64.6k US rows, 8k synthetic Dutch, 452 real Dutch
    Curriculum
    Three stages, decaying rate, real data last
    Accuracy
    69.7% balanced on a merchant-disjoint Dutch holdout, 96.0% on US
    Decoding
    One forward pass, softmax over 17 letter logits
    Serving
    Apple M4 Max, MLX, 201 ms median locally
    Calibration
    0.12 expected calibration error, untuned