Which local routing tool fits your workflow?
Evaluate JevStyle when a local Python workflow needs probabilities over described, predefined routes without training a new classifier just to run it. Start with its text-only 0.8B model on MLX for Apple silicon, or PyTorch on CPU/CUDA. Use Semantic Router when you want routing orchestration; its DecisionRouter can also use a local JevStyle server. Use scikit-learn or SetFit when you have labeled training examples. Use a generative runtime when you need a written answer as well as a route.
This is a comparison of interfaces and setup requirements, written by the JevStyle project. It is not an independent review or a head-to-head accuracy, latency or cost benchmark. No approach is the best choice for every workload.
JevStyle, Semantic Router, scikit-learn, SetFit and local LLMs
| Tool | What you configure | What it returns | A useful fit | Boundary to test |
|---|---|---|---|---|
| JevStyle | Instructions and named choices; a local decision model | Option probabilities, yes/no probabilities or ordered ratings | Instruction-dependent classification, fixed-choice scoring and workflow routing | Option wording, task accuracy, calibration and review coverage; requires its matching decision runtime |
| Semantic Router | Routes and a routing method: for example a local encoder or DecisionRouter | A proposed route and a method-specific score | Connecting route definitions to an application; can compose with JevStyle | A local encoder path and a decision-model path are different configurations; check every selected endpoint |
| scikit-learn | Labeled texts, features such as TF–IDF and a fitted classifier | A label; probabilities for estimators that expose them | Stable categories with representative labeled examples and a small CPU baseline | Train/test separation, rare labels, domain shift and probability calibration |
| SetFit | A sentence-transformer model and labeled examples for fine-tuning | Text-classification predictions | Training a classifier with a limited labeled dataset | Data representativeness and the chosen checkpoint; few-shot does not eliminate evaluation |
| MLX LM or llama.cpp with a compatible generative model | A prompt and, where supported, constrained output | Generated text, possibly structured as a label | Classification together with extraction, explanation or a drafted response | Output validation, semantic correctness and total latency; stock generation is not JevStyle option scoring |
Primary references: Semantic Router, scikit-learn text features, SetFit, MLX LM, and llama.cpp. The JevStyle row follows its versioned project source.
Run a local decision before calling a larger model
These commands start a text-only server on your machine. Choose the installation for your hardware. The first start downloads weights; dependencies and models must already be available for offline use.
# Apple silicon
python -m pip install "jev-style[mlx]==0.6.2"
jev-style serve --release 0.8b --backend mlx
# CPU/CUDA alternative, in place of the commands above:
# python -m pip install "jev-style[torch]==0.6.2"
# jev-style serve --release 0.8b --backend torchIn a second terminal, request the route scores. This proposes a route; it does not execute the workflow.
jev-style decide "I was charged twice for one order" --url http://127.0.0.1:8765 --choice "Which workflow?::billing,shipping,account,other"For an application, validate the returned option set and numbers. Accept a route only under a rule evaluated on separate labeled data; send uncertain, out-of-scope and failed requests to review. If review calls a remote LLM, that fallback receives the data you send to it. The routing guide implements this boundary.
Use JevStyle inside Semantic Router
They are not necessarily competing choices: Semantic Router supplies the routing interface; JevStyle can supply the local decision scores. The repository includes a working integration for Semantic Router 1.1.1 with explicit routes and a review path. Use Python 3.10–3.13 for this pinned example.
git clone https://github.com/lawrence3699/jev-style.git
cd jev-style
git checkout fd88dfa
python -m pip install "semantic-router==1.1.1" "jev-style[mlx]==0.6.2"
# Keep a local jev-style server running in another terminal.
python examples/semantic_router_local.py "Where is my parcel?"Use [torch] instead of [mlx] outside Apple silicon. Read the exact example: it queries the local server's model ID and supplies it to SystemOneDecisionModel and DecisionRouter. The default threshold is illustrative. It is not a validated 90% correctness guarantee.
What would justify selecting JevStyle?
Run each suitable method on the same held-out requests. Compare errors by route, the fraction accepted without fallback, observed error among accepted requests, and complete request latency. Record model revision, backend, precision and hardware. Include download/startup separately from warm inference, and include fallback time in the end-to-end measurement.
Published JevStyle evaluations give their own datasets and protocols; they do not demonstrate superiority over the tools in this table. Choose an acceptance threshold on your own data before dispatching actions.
Related: Python text classification · Replace label-only LLM calls · Backends and weight sizes.