RubriX is a non-autoregressive rubric judge. Given a criterion, the rubric's level descriptions and a response (optionally with the conversation it answers), it returns a probability for every level in a single pass, with no text generation. Level descriptions are embedded once per rubric and cached, so the cost of each judgment does not grow with the number or length of the levels. Read more in the blog post: Introducing RubriX. One encoder, Qwen3-8B with this repository's LoRA adapter, embeds the input and each level description separately. Two projection heads map them into a shared space, and - sk = τ · cos(f(input), g(levelk)), with τ = 100 - p = softmax(s1 … sK) The model was trained…