CLI reference
Every command and every flag, generated from the parser jul runs (jul <command> --help prints
the same). For what the commands are for, with examples and file formats, read
Command line first.
| Command | What it does |
|---|---|
jul setup |
install the backend, download the model, check a first answer |
jul ask |
one typed question, answered now |
jul run |
answer a question file over a JSONL input |
jul context |
create, list, show or delete a saved context |
jul autotune |
train a per-task head from labeled examples |
jul pack |
pack questions (and a context's heads) into a bundle to deploy; trains nothing |
jul synth |
write a synthetic labeled dataset (for a later autotune) |
jul models |
list the presets, or fit one for a new model (add) |
jul serve |
serve the Jev HTTP protocol (POST /v1/systemone) locally |
jul bench |
which model for your questions: accuracy, latency, autotune, on your data |
jul lab |
research commands |
jul setup
install the backend, download the model, check a first answer.
jul setup [-h] [--model MODEL] [--backend {mlx,torch,onnx,api}] [--no-install] [--no-check]
| Argument | Values | Default | What it does |
|---|---|---|---|
--model MODEL |
preset: wemm-4b-4bit, minicpm5-2b, jul-decision-wemm-4b, jul-decision-minicpm5-2b (aliases: fast, accurate) | ||
--backend BACKEND |
mlx, torch, onnx, api | default: $JUL_BACKEND, else mlx on Apple Silicon, else torch | |
--no-install |
do not pip install a missing backend | ||
--no-check |
skip the final test decision |
jul ask
one typed question, answered now.
jul ask [-h] [-o OPTION] --state STATE [--model MODEL] [--backend {mlx,torch,onnx,api}] [--context CONTEXT] [--method {vector,letters,cross}] {choice,noul,score} instructions
| Argument | Values | Default | What it does |
|---|---|---|---|
kind |
choice, noul, score | ||
instructions |
|||
-o, --option OPTION |
choice: key[:description]; noul: true:meaning / false:meaning; score: a level description, lowest first | ||
--state STATE |
the text to judge (repeatable) required | ||
--model MODEL |
preset: wemm-4b-4bit, minicpm5-2b, jul-decision-wemm-4b, jul-decision-minicpm5-2b (aliases: fast, accurate) | ||
--backend BACKEND |
mlx, torch, onnx, api | default: $JUL_BACKEND, else mlx on Apple Silicon, else torch | |
--context CONTEXT |
name of a saved context | ||
--method METHOD |
vector, letters, cross |
jul run
answer a question file over a JSONL input.
jul run [-h] --input INPUT [--output OUTPUT] [--model MODEL] [--backend {mlx,torch,onnx,api}] [--context CONTEXT] [--method {vector,letters,cross}] questions
| Argument | Values | Default | What it does |
|---|---|---|---|
questions |
|||
--input INPUT |
required | ||
--output OUTPUT |
|||
--model MODEL |
preset: wemm-4b-4bit, minicpm5-2b, jul-decision-wemm-4b, jul-decision-minicpm5-2b (aliases: fast, accurate) | ||
--backend BACKEND |
mlx, torch, onnx, api | default: $JUL_BACKEND, else mlx on Apple Silicon, else torch | |
--context CONTEXT |
|||
--method METHOD |
vector, letters, cross |
jul context
create, list, show or delete a saved context.
jul context [-h] [--description DESCRIPTION] [--examples EXAMPLES] [--use-description] [--lazy] [--model MODEL] [--backend {mlx,torch,onnx,api}] {create,list,show,delete} [name]
| Argument | Values | Default | What it does |
|---|---|---|---|
action |
create, list, show, delete | ||
name |
|||
--description DESCRIPTION |
|||
--examples EXAMPLES |
.txt (one per line) or .jsonl with a text field |
||
--use-description |
also put the description in the prompts; measured harmful on average, so it is off unless you ask and measure on your own data | ||
--lazy |
do not compute the centers now | ||
--model MODEL |
preset: wemm-4b-4bit, minicpm5-2b, jul-decision-wemm-4b, jul-decision-minicpm5-2b (aliases: fast, accurate) | ||
--backend BACKEND |
mlx, torch, onnx, api | default: $JUL_BACKEND, else mlx on Apple Silicon, else torch |
jul autotune
train a per-task head from labeled examples.
jul autotune [-h] --questions QUESTIONS --labeled LABELED [--features {vector,lexical,hybrid}] [--model MODEL] [--backend {mlx,torch,onnx,api}] context
| Argument | Values | Default | What it does |
|---|---|---|---|
context |
name of the context the head is stored in | ||
--questions QUESTIONS |
required | ||
--labeled LABELED |
JSONL: {state, answers: {question: answer}} required | ||
--features FEATURES |
vector, lexical, hybrid | vector | what the head reads: the model's vectors (default), TF-IDF of the text, or both |
--model MODEL |
preset: wemm-4b-4bit, minicpm5-2b, jul-decision-wemm-4b, jul-decision-minicpm5-2b (aliases: fast, accurate) | ||
--backend BACKEND |
mlx, torch, onnx, api | default: $JUL_BACKEND, else mlx on Apple Silicon, else torch |
jul pack
pack questions (and a context's heads) into a bundle to deploy; trains nothing.
jul pack [-h] --questions QUESTIONS [--context CONTEXT] [--model MODEL] [--backend {mlx,torch,onnx,api}] [--reading {auto,vector}] out
| Argument | Values | Default | What it does |
|---|---|---|---|
out |
directory to write | ||
--questions QUESTIONS |
required | ||
--context CONTEXT |
context whose heads and calibration the bundle carries | ||
--model MODEL |
preset: wemm-4b-4bit, minicpm5-2b, jul-decision-wemm-4b, jul-decision-minicpm5-2b (aliases: fast, accurate) | ||
--backend BACKEND |
mlx, torch, onnx, api | default: $JUL_BACKEND, else mlx on Apple Silicon, else torch | |
--reading READING |
auto, vector | auto | auto: the preset's cross model answers the types it declares (default); vector: every question as vectors, so the bundle needs the vector model only |
jul synth
write a synthetic labeled dataset (for a later autotune).
jul synth [-h] [--seeds SEEDS] --output OUTPUT [--per-option PER_OPTION] --writer WRITER [--batch BATCH] [--temperature TEMPERATURE] [--seed SEED] questions
| Argument | Values | Default | What it does |
|---|---|---|---|
questions |
|||
--seeds SEEDS |
JSONL of real examples: {state|text, answers?}; answers optional | ||
--output OUTPUT |
JSONL in the format of autotune --labeled required | ||
--per-option PER_OPTION |
30 | texts per option (default 30) | |
--writer WRITER |
a generative mlx-lm repo, e.g. an instruct model of 7B or more required | ||
--batch BATCH |
8 | texts asked per call (default 8) | |
--temperature TEMPERATURE |
0.9 | ||
--seed SEED |
jul models
list the presets, or fit one for a new model (add).
jul models [-h] [--repo REPO] [--backend {mlx,torch,onnx,api}] [--data DATA] [--n-dev N_DEV] [--n-generic N_GENERIC] [--no-routing] [--route-above ROUTE_ABOVE] [--cross CROSS] [--no-cross] [--train-heads ROWS] [--questions QUESTIONS] [--epochs EPOCHS] [{list,add}] [name]
| Argument | Values | Default | What it does |
|---|---|---|---|
action |
list, add | list | |
name |
add: the preset name | ||
--repo REPO |
add: Hugging Face repo (default: the known repo for this name), or a local directory; one holding a decision.json is added as a decision model | ||
--backend BACKEND |
mlx, torch, onnx, api | default: $JUL_BACKEND, else mlx on Apple Silicon, else torch | |
--data DATA |
add: calibration data dir (default: fetched into ~/.jul/calibration-data) | ||
--n-dev N_DEV |
50 | add: examples per dev set (default 50) | |
--n-generic N_GENERIC |
200 | add: generic texts (default 200) | |
--no-routing |
add, decision model: skip fitting the vector reading long questions fall back to | ||
--route-above ROUTE_ABOVE |
add, decision model: option count above which it falls back to vectors; 0 disables the routing. Default: measured (or its decision.json, if it says) | ||
--cross CROSS |
add: a cross model (directory or repo with a cross.json) that answers the question types it declares; without --repo, attached to the fitted preset. A repo carrying one in cross/ gets it without this flag | ||
--no-cross |
add: ignore the cross model the repo carries | ||
--train-heads ROWS |
add: train contrastive heads on the --repo backbone (kept frozen) from labeled rows, JSONL {state, type, question, options, answer} or parquet; with --questions, autotune's format {state, answers}. Needs torch for the training | ||
--questions QUESTIONS |
add --train-heads: the question file the rows answer | ||
--epochs EPOCHS |
40 | add --train-heads: maximum epochs (default 40) |
jul serve
serve the Jev HTTP protocol (POST /v1/systemone) locally.
jul serve [-h] [--model MODEL] [--backend {mlx,torch,onnx,api}] [--host HOST] [--port PORT] [--api-key API_KEY] [--no-warmup] [--escalate-to TARGET] [--escalate-model ESCALATE_MODEL] [--escalate-key-env VAR] [--min-confidence MIN_CONFIDENCE]
| Argument | Values | Default | What it does |
|---|---|---|---|
--model MODEL |
preset: wemm-4b-4bit, minicpm5-2b, jul-decision-wemm-4b, jul-decision-minicpm5-2b (aliases: fast, accurate) | ||
--backend BACKEND |
mlx, torch, onnx, api | default: $JUL_BACKEND, else mlx on Apple Silicon, else torch | |
--host HOST |
127.0.0.1 | bind address (default 127.0.0.1, local only) | |
--port PORT |
8577 | port (default 8577) | |
--api-key API_KEY |
require this key, as Authorization: Bearer or x-api-key (else $JUL_API_KEY). Recommended when binding beyond 127.0.0.1. | ||
--no-warmup |
do not load the model before serving | ||
--escalate-to TARGET |
send answers below --min-confidence elsewhere: typesafe (key in TYPESAFE_API_KEY), ollama[:model], cloudflare[:clef|clef-flash] (CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_API_TOKEN), or the URL of any /v1/systemone server. The state leaves the machine | ||
--escalate-model ESCALATE_MODEL |
model asked there (default: the provider's) | ||
--escalate-key-env VAR |
the environment variable holding that server's key, for a URL target | ||
--min-confidence MIN_CONFIDENCE |
0.8 | the bar below which an answer escalates (default 0.8; a Noul counts max(p, 1-p)) |
jul bench
which model for your questions: accuracy, latency, autotune, on your data.
jul bench [-h] [--train TRAIN] [--models MODELS] [--remote-key-env VAR] [--escalate-to TARGET] [--min-confidence MIN_CONFIDENCE] [--backend {mlx,torch,onnx,api}] [--method M[,M]|auto] [--features F[,F]|auto] [--output OUTPUT] [--json] [--near NEAR] [--drop-overlap] [--allow-overlap] [--quiet] [--on-long {cut,error}] test
| Argument | Values | Default | What it does |
|---|---|---|---|
test |
JSONL or CSV, one row per answer: question, state, options, answer (type optional) | ||
--train TRAIN |
same format: rows to autotune on; without it, zero-shot only | ||
--models MODELS |
presets or aliases, comma-separated, each optionally @backend (e.g. jul-decision-e5-small@onnx,minicpm5-2b@torch); default: the default model. Also remote System One servers: typesafe (Jev), ollama[:model], cloudflare:clef|clef-flash, or URL#model (Kev, a hosted Laya...): the test rows are sent there | ||
--remote-key-env VAR |
the environment variable holding the key of the URL targets in --models (providers use their own: TYPESAFE_API_KEY, CLOUDFLARE_API_TOKEN) | ||
--escalate-to TARGET |
also measure each local model as a cascade: itself first, then this remote server (same targets as --models) for the answers below --min-confidence; reports the accuracy and the share of rows sent there | ||
--min-confidence MIN_CONFIDENCE |
0.8 | the cascade's bar (default 0.8, as jul serve; a Noul counts max(p, 1-p)) | |
--backend BACKEND |
mlx, torch, onnx, api | default: $JUL_BACKEND, else mlx on Apple Silicon, else torch | |
--method M[,M]|auto |
zero-shot readings to compare: vector, letters, cross, or auto for every one the model takes (default: the model's own reading) | ||
--features F[,F]|auto |
with --train: what the autotune heads read, vector, lexical, hybrid, or auto (default: vector) | ||
--output, -O OUTPUT |
also write the full results as JSON to this file | ||
--json |
print the JSON results instead of the tables | ||
--near NEAR |
0.8 | similarity (character 5-grams) from which a test row counts as a near duplicate of a train row (default 0.8) | |
--drop-overlap |
drop test rows found in train (exact or near) | ||
--allow-overlap |
run even with exact duplicates train/test | ||
--quiet, -q |
no progress on stderr | ||
--on-long ON_LONG |
cut, error | a state over a reading's limit: cut (default, answer on its beginning) or error (refuse) |
jul lab
research commands.
jul lab [-h] ...
| Argument | Values | Default | What it does |
|---|---|---|---|
rest |
passed through: extract, evaluate, bench, summary, ask, decide |