FAQ
Does it need a GPU?
Section titled “Does it need a GPU?”No. With device auto (the default), the server uses the CPU when no GPU provider loads. 1
device is auto by default: it uses the first GPU provider that loads (CUDA, CoreML on macOS, DirectML on Windows) and whose answers match the CPU on a probe, otherwise the CPU. 1
With device set to gpu, the server refuses to start unless a GPU provider loads. 1
openjevx Server’s sizing notes say CPU only. 2
Can I run any model with it?
Section titled “Can I run any model with it?”No. openjevx Server serves OpenJevX-format models only, not arbitrary ONNX models. 3
A model folder holds openjevx.w8.onnx, config.json and tokenizer.json. 4
The server refuses a folder with no config.json. 5
It also refuses a config.json with no temperature. 6
The server opens the graph with the output names logits and act_logits. 7 8
Is there authentication?
Section titled “Is there authentication?”Yes. POST /v1/systemone takes an API key, sent as Authorization: Bearer <key>. 9
The key is on whenever the server listens beyond loopback, and off on 127.0.0.1, ::1 and localhost unless one is set. 10
Set it with api_key in openjevx.json or OPENJEVX_API_KEY; unset but needed, the server generates one into openjevx.api-key. 11
/stats and /metrics use the dashboard password, and /health is open. 12 13
The dashboard password is always on: unset, the server generates one into openjevx.password. 14
A generated value is shown once, and only on a terminal; in Docker, systemd, ECS or CloudWatch logs you get the file and a fingerprint, never the secret, so read it from the file. 15
The jev-cloud gate requires Authorization: Bearer <JEV_API_KEY> on every /v1/* call. 16
Details are on the API reference page.
What port does it use?
Section titled “What port does it use?”Why do I get old answers after upgrading the model?
Section titled “Why do I get old answers after upgrading the model?”jevx caches answers for 7 days, keyed by the profile’s model name. 19
The server always answers with "model": "openjevx", whatever folder is loaded. 20
After upgrading the model, run jevx cache clear, or give the profile a versioned model name such as openjevx-0.5.2. 21
GET /health reports the loaded model’s version and sha256. 22
How long can inputs be?
Section titled “How long can inputs be?”The shipped model 0.5.2 has max_len 512 and head_max 256 in its config.json. 23
Longer inputs are cut at 512 tokens. 24
Each option is cut to 48 tokens. 25
The state is cut to max_len minus everything before it (the head, the options and their separator tokens), minus one. 26
The full layout is on the question types page.
What happens when one request carries several questions?
Section titled “What happens when one request carries several questions?”One request can carry several named questions about one state; the several-judgements recipe sends three questions of the three types. 27 28
Each question is encoded as its own item, with the same state tokens. 29
Batching many questions re-encodes the shared state once per question, because the question comes first in the input. 30
A layout that shares the state would need retraining. 30
So latency grows with the number of questions: on model 0.5.0, Apple M5 Pro CPU, a typical 164-token state took 84.8 ms p50 with one question and 666.4 ms p50 with eight questions (1319 tokens). 31 32 33
Typical requests are under 100 ms on the M5 Pro; long inputs and many-question batches are not. 34
An answer can move slightly with what else is in the request. 35
On 2026-10-03 a pick-one answer went from 0.9173 to 0.9214 when a long yes/no question was added to the same request; the yes/no answers did not change. 36
Can I host it on AWS Fargate, and how fast is it?
Section titled “Can I host it on AWS Fargate, and how fast is it?”Yes. The openjevx Server CloudFormation template runs it on Amazon ECS Fargate in your account. 37
In vendor tests on Fargate, server-side, per vCPU, a short decision of 50 tokens took 0.3-1.05 s and a 512-token input took 3.6-10.5 s; the range follows the host CPU Fargate assigns. 38
The range follows the host CPU that Fargate assigns. 38
On x86, AVX2-only hosts are about 2x slower than AVX-512 VNNI ones, and Fargate hands out both. 39
Fargate limits CPU in a way the server cannot see, so a 1 vCPU task reports 2 CPUs. 40
With threads unset and no cgroup quota, on ECS / Fargate the server uses the task’s Limits.CPU as the thread count. 41
Set OPENJEVX_THREADS to override it. 42
See AWS Marketplace for the stacks.
Where are models loaded from?
Section titled “Where are models loaded from?”The model path comes from the -model flag, then OPENJEVX_MODEL, then "model" in openjevx.json. 43
Unset, the server looks next to itself for model/, then models/openjevx/, then openjevx.w8.onnx. 44
openjevx.json is read from the working directory, then from next to the executable. 45
The model can also be s3://bucket/prefix/ holding the three files, or one s3://bucket/model.tar.gz. 46
S3 credentials come from the AWS default credential chain. 47
gs:// and azblob:// are not supported by the server yet. 48
Can I swap the model without a restart?
Section titled “Can I swap the model without a restart?”Yes, for an S3 model: set model_reload (or OPENJEVX_MODEL_RELOAD) to how often to check the ETag, for example 5m; it is off by default. 49 50
On a new ETag the server downloads into a new cache folder, verifies it, opens a new session and swaps it in between requests. 51
A bad upload is logged and the old model keeps serving. 52
Does it send telemetry?
Section titled “Does it send telemetry?”The server turns ONNX Runtime’s telemetry off (ORT_DISABLE_TELEMETRY=1 unless you set it). 53
openjevx Server’s security notes say it makes no outbound calls except reading your model from S3. 54
Why won’t the Docker image start?
Section titled “Why won’t the Docker image start?”The image has no default credentials. 55
It refuses to start without OPENJEVX_PASSWORD and OPENJEVX_API_KEY, or your own openjevx.json mounted at /data/openjevx.json. 56
The entrypoint stops with “OPENJEVX_PASSWORD must be at least 12 characters” when it is shorter. 57
It stops with “OPENJEVX_API_KEY must be at least 16 characters” when the key is shorter. 58
The image runs as uid 10001, not root; /data is its writable working folder. 59
Your own openjevx.json can also be mounted read-only at /app/openjevx.json; credentials the image has to generate go to /data (OPENJEVX_DATA). 60
A prebuilt image, ghcr.io/deemwar-products/openjevx, is published for each release tag and latest, for linux/amd64 and linux/arm64. 61
How do I fine-tune it?
Section titled “How do I fine-tune it?”cd finetuning && task all runs data, leakage check, smoke run, full run and gate as one job. 62
The job produces a model folder with that run’s calibration temperatures. 63
The full walk-through is on the Fine-tune page.
Can you train a model for us from our documents?
Section titled “Can you train a model for us from our documents?”OpenJevX is free. The only paid offers are installation, support and training: [email protected]
Training data is your decisions as a CSV: one row is one decision, with the fact the rule needs in the state, the question, and the right answer. 64 65
The SageMaker training image takes ONE customer’s decisions.csv and builds shards from those rows only. 66
What licence is it under?
Section titled “What licence is it under?”OpenJevX is Apache-2.0. 67 68 The Docker image ships the LICENSE, NOTICE and the third-party licences. 69
How sure is the model? Can I trust a confident answer?
Section titled “How sure is the model? Can I trust a confident answer?”Not always. On the logs gate (900 cases), model 0.5.2 was confidently wrong on 7.8% (hardware not recorded). 70 A calibration temperature could not separate right from confidently wrong answers on model 0.5.0. 71 72 Your inputs will score differently: copy the pattern, not the numbers, and test on your own data. 73
Sources
Section titled “Sources”Footnotes
Section titled “Footnotes”-
openjevx @ v0.5.9 (ee2a1f4) ·
cmd/openjevx/main.goL574–576 ↩ ↩2 ↩3 -
jev-cloud @ origin/main (10a744c) ·
marketplace/aws/listing/usage-instructions-openjevx-server.txtL34–35 ↩ -
jev-cloud @ origin/main (10a744c) ·
marketplace/aws/listing/usage-instructions-openjevx-server.txtL3–4 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
cmd/openjevx/model.goL17–23 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
cmd/openjevx/model.goL82–85 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
cmd/openjevx/model.goL90–92 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
cmd/openjevx/main.goL360–361 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
cmd/openjevx/main.goL391 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
cmd/openjevx/auth.goL22 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
cmd/openjevx/auth.goL23 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL31 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL206–208 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
cmd/openjevx/auth.goL24 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL32 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL38–40 ↩ -
jev-cloud @ origin/main (10a744c) ·
image/gate/main.goL5–6 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
cmd/openjevx/main.goL447–448 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL18–21 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
recipes/README.mdL87 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
cmd/openjevx/decision.goL96–97 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
recipes/README.mdL87–89 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL82–83 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL70–72 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
llmresults/13-v0.5.2-gate-misses.mdL120–121 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
internal/decide/decide.goL141–146 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
internal/decide/decide.goL170–181 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
recipes/README.mdL34–35 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
recipes/17-several-judgements.mdL3 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
internal/decide/decide.goL126–134 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
llmresults/12-inference-latency.mdL72–73 ↩ ↩2 -
openjevx @ v0.5.9 (ee2a1f4) ·
llmresults/12-inference-latency.mdL3 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
llmresults/12-inference-latency.mdL9 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
llmresults/12-inference-latency.mdL31–36 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
docs/adr/0011-inference-runtime.mdL27–28 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL244–245 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL245–246 ↩ -
jev-cloud @ origin/main (10a744c) ·
marketplace/aws/listing/openjevx-server-ecs.cfn.yamlL1–5 ↩ -
jev-cloud @ origin/main (10a744c) ·
marketplace/aws/listing/usage-instructions-openjevx-server.txtL36–37 ↩ ↩2 -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL56–57 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL52–53 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL49–52 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL49 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
cmd/openjevx/main.goL63–68 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL81 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
cmd/openjevx/main.goL474–477 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL88–89 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL89–91 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL93 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL99 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL111–114 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL113–114 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL114 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL216–217 ↩ -
jev-cloud @ origin/main (10a744c) ·
marketplace/aws/listing/usage-instructions-openjevx-server.txtL43–45 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL169 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL169–170 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
deploy/docker-entrypoint.shL10 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
deploy/docker-entrypoint.shL14 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL170–171 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
docs/DEPLOY.mdL22–24 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
docs/DEPLOY.mdL75–76 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL252 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL257–258 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
finetuning/examples/README.mdL1 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
finetuning/examples/README.mdL10 ↩ -
jev-cloud @ origin/main (10a744c) ·
train/sagemaker/README.mdL3–5 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
README.mdL196 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
LICENSEL1–3 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
DockerfileL29–31 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
llmresults/13-v0.5.2-gate-misses.mdL107–113 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
llmresults/13-v0.5.2-gate-misses.mdL3 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
llmresults/13-v0.5.2-gate-misses.mdL18–22 ↩ -
openjevx @ v0.5.9 (ee2a1f4) ·
recipes/README.mdL50 ↩