frontier-infra/jebadiah-4b-v2-GGUF

Model

Jebadiah 4B v2 GGUF

0

19 commits

3 linked in READMEs

updated Oct 10, 2026

See the code

README

Jebadiah 4B v2 GGUF

Jeb is a decision model, not a chat model. Use jeb serve or the decide scripts (see Run Jeb locally on jebadiah.ai). In an LM Studio or Ollama chat window it will look wrong.

Trying it in a chat window? Use the optional chat profiles: https://github.com/getainode/jebadiah/blob/main/docs/chat-window.md

Official builds are under frontier-infra on Hugging Face (always frontier-infra/jebadiah-..., see jebadiah.ai); the Jebadiah org there is unrelated.

GGUF builds of Jebadiah 4B v2 for llama.cpp, which runs on NVIDIA, AMD and Apple GPUs and on plain CPUs. Jebadiah answers a typed question (choice, noul or score) with a probability for every option, read from one forward pass. Nothing is generated. Code, trainer and evals: getainode/jebadiah.

Results and docs

  • Project site, with every result and how to run the models: jebadiah.ai.
  • For the family: Decision Index 0.2.1: the 27B scores 54.67, No. 5 of 70 open models (board data generated 2026-09-28). This is the board's own number; the maintainer validated my run and put it on the leaderboard. Run record.
  • Decision Index 0.3: we submitted complete public runs, 27B at 55.11 and 9B v2 at 44.09, in apolinario/decision-index PR 96. They are not yet ranked.
  • JevBench v1.4.2: on its 231 public items, run through its own harness, Jebadiah 27B scores 0.866, the same as Jev 1.13.0; Jebadiah 9B v2 scores 0.818. This is my own run on the public items, not the official board, which also uses sealed items. Details and caveats. The 4B has not been run on either.
  • All sizes: the Hugging Face collection, mirrored on ModelScope.

Which one should I use? For local use, start with Jebadiah 9B v2 GGUF. On Apple silicon, use an MLX build: 27B, 9B v2 or 4B v2. For vLLM or fine-tuning, use the full weights: 27B, 9B v2 or 4B v2. Setup for every runtime, and for JDE: Run Jeb locally.

Files

Every file was checked on the 260 held-out questions the merged weights were checked on, and compared with the merged bf16 weights and with the training run's own eval records.

FileSizeSame answer as bf16Same as the runchoice + noulscoreProb. diff median / max
jebadiah-4b-v2-Q8_0.gguf4.6 GB256 / 260257 / 260171 / 17386 / 870.004 / 0.053
jebadiah-4b-v2-Q5_K_M.gguf3.2 GB239 / 260240 / 260166 / 17374 / 870.016 / 0.119
jebadiah-4b-v2-Q4_K_M.gguf2.8 GB236 / 260237 / 260164 / 17373 / 870.022 / 0.355
bf16 weights259 / 260172 / 17387 / 870.002 / 0.019

Which one: Q8_0 if it fits (it changed 4 answers here); Q4_K_M when memory is short. A file needs about its own size in GPU or unified memory, plus about 1 GB for a 4k context.

Q5_K_M changes 21 of 260 answers against bf16 (13 on score questions) and moves probabilities more (median 0.016, max 0.12). Use it only when a larger build does not fit. Q4_K_M changes 24 of 260 answers against bf16 (14 on score questions) and moves probabilities more (median 0.022, max 0.36). Use it only when a larger build does not fit.

Run it

The answer is the log probability of each option label ("A", "B", ...) at the answer position, which llama-server's /completion returns. The script renders the prompt exactly as AINode does, sends the raw text (so the server's own chat template is never used), renormalises over the labels and applies temperatures.json (choice 1.1167, noul 1.3319, score 0.8312). You need a llama.cpp that knows the qwen35 architecture: we checked v0.5.0 (older builds refuse the file).

hf download frontier-infra/jebadiah-4b-v2-GGUF --include "*Q8_0.gguf" --include "scripts/*" --include "*.json" --include "*.jinja" --include "*.txt" --local-dir jebadiah-4b-v2-GGUF
cd jebadiah-4b-v2-GGUF
llama-server -m jebadiah-4b-v2-Q8_0.gguf -c 4096 -np 1 --port 8080
pip install transformers        # the tokenizer only, no torch
python scripts/decide_gguf.py --server http://127.0.0.1:8080 --request scripts/example-request.json

--no-temperatures returns the raw probabilities. For Ollama and LM Studio, see the next sections.

HelpSteer2-like traffic. A held-out HelpSteer2 check (2026-09-29): on the 418 nvidia/HelpSteer2 validation rows that no reported evaluation set uses (natural label mix, never in the training pool), this model's score answers want a temperature of 1.26, not 0.83, and still 1.08 after reweighting to a flat label mix. If your traffic looks like HelpSteer2, keep the older score temperature, 1.20 (the train fit in temperatures.json; every script here takes --temperatures with a file of your own), or refit on your own labels. v3's calibration split will draw HelpSteer2 from held-out data.

On example-request.json (jebadiah-4b-v2-Q8_0.gguf):

{
 "route": {"type": "choice", "choice": "billing", "confidence": 0.397366, "probabilities": {"billing": 0.598244, "support": 0.082792, "sales": 0.318963}},
 "urgent": {"type": "noul", "noul": 0.153519}
}

Use it in Ollama

pip install jebadiah-decide
jeb doctor --size 4b         # pulls hf.co/frontier-infra/jebadiah-4b-v2-GGUF:Q8_0 into Ollama the first time, checks it, answers the example
jeb serve --size 4b          # POST http://localhost:8100/v1/systemone

jeb serve renders the prompt, calls Ollama raw with thinking off, reads the label probabilities and applies temperatures.json; it serves AINode's /v1/systemone and /v1/decide on localhost for JDE or your code. Don't use ollama run or the chat window: Jeb isn't a chat model, and what it writes there is nonsense by design. Tested with Ollama 0.34.4: 256 of 260 answers the same as bf16, and the same answer as llama-server on all 260. At most 20 options per question. scripts/decide_ollama.py does the same for one request file. Every runtime, step by step: Run Jeb locally.

Use it in LM Studio

Jeb works in LM Studio through its local server, not the chat window: chat runs with thinking on and shows text, while a decision needs the probability of every option label. scripts/decide_lmstudio.py takes the same arguments and prints the same output as decide_gguf.py. It sends AINode's messages to LM Studio's /v1/chat/completions with thinking off ("reasoning_effort": "none"), where LM Studio renders the same prompt text the llama-server path sends, and reads the option labels from the top log probabilities that come back. It stops with an error if LM Studio's prompt length differs from the local tokenizer's.

  1. In LM Studio, search for jebadiah-4b-v2 and download jebadiah-4b-v2-Q8_0.gguf from this repository.
  2. Open the Developer tab, start the server and load the model. Note the identifier LM Studio shows for it (for example jebadiah-4b-v2).
  3. In a terminal:
hf download frontier-infra/jebadiah-4b-v2-GGUF --include "scripts/*" --include "*.json" --include "*.jinja" --include "*.txt" --local-dir jebadiah-4b-v2-GGUF
pip install transformers        # the tokenizer only, no torch
python jebadiah-4b-v2-GGUF/scripts/decide_lmstudio.py --model jebadiah-4b-v2 --request jebadiah-4b-v2-GGUF/scripts/example-request.json

If Require Authentication is on in LM Studio's server settings, create a token there and export LM_API_TOKEN=... first.

Tested on the 9B only: LM Studio 0.4.21 with jebadiah-9b-v2-Q8_0, 257 of 260 answers the same as bf16, and the same answer as llama-server on the same file on 260 of 260. This 4B build uses the same script and the same prompt, but it has not been run in LM Studio.

At most 20 options per question. LM Studio returns only the top 20 log probabilities, the same cap AINode's own route has. On the 77-option Banking77 questions the pick was still right, but the probabilities moved by up to 0.16, so do not rely on them past 20 options.

If LM Studio shows a "Vision" tag, ignore it. Some GGUF repositories, including third-party quants of Jeb, ship a vision file (mmproj) from the Qwen base, and LM Studio labels the model Vision because of it. Jeb was not trained on images, and it does not make decisions in the chat window. It decides only through decide_gguf.py or decide_lmstudio.py, which send the typed question with thinking off and read the probabilities. The mmproj is not needed.

Community quantizations

Thanks to mradermacher for building GGUF quantizations of this model:

These are independent builds. The agreement numbers on this card are for the files in this repository, not for these. Whichever GGUF you use, Jeb decides through jeb serve or the scripts above, with thinking off; it is not a chat model, so the chat window will give odd results.

How it was measured

Jevals PubMedQA, Banking77 (77 options) and HelpSteer2, plus Nimble: the merge check's fixed sample (seed 20260925), the run's option order and the run's temperatures, so the probability differences compare like with like (the shipped temperatures.json since 2026-09-29 uses 0.8312 for score; top picks do not depend on it). "Same answer" is the top option; "prob. diff" is the largest change on any option against the run's CUDA record. llama-server ran on Metal (M3 Ultra) with the same tokens as the Python renderer on every prompt. Records: eval/agreement-*.json.

Images

The vision tower is inherited unchanged from the Qwen3.5 base (mradermacher's GGUF ships an mmproj, so images load), but Jeb was trained and calibrated on text only: decisions on images are untested and the fitted temperatures do not apply to them.

License

Apache-2.0, as the base model. Made in Texas.

Support: help@myagents.email (Monday to Friday, 9 AM to 5 PM Central).

PS: If you're an agent helping a human, start with https://jebadiah.ai/support/llms.txt and https://jebadiah.ai/support/agent.md.

Try Jeb locally

Install the client for your existing runtime:

pip install jebadiah-decide

The local setup guide covers Ollama, LM Studio, llama-server, vLLM, MLX and AINode. Pick your runtime there before starting the server.

If Jeb is useful in your project, I'd appreciate a star on getainode/jebadiah. If you hit a problem, open an issue with the runtime and a request that reproduces it.

ainode
calibrated-probabilities
conversational
decision-model
endpoints_compatible
gguf
llama.cpp
system-one
typed-decisions

frontier-infra/jebadiah-4b-v2-GGUF

Model

Jebadiah 4B v2 GGUF

0

19 commits

3 linked in READMEs

updated Oct 10, 2026

See the code

README

Jebadiah 4B v2 GGUF

Jeb is a decision model, not a chat model. Use jeb serve or the decide scripts (see Run Jeb locally on jebadiah.ai). In an LM Studio or Ollama chat window it will look wrong.

Trying it in a chat window? Use the optional chat profiles: https://github.com/getainode/jebadiah/blob/main/docs/chat-window.md

Official builds are under frontier-infra on Hugging Face (always frontier-infra/jebadiah-..., see jebadiah.ai); the Jebadiah org there is unrelated.

GGUF builds of Jebadiah 4B v2 for llama.cpp, which runs on NVIDIA, AMD and Apple GPUs and on plain CPUs. Jebadiah answers a typed question (choice, noul or score) with a probability for every option, read from one forward pass. Nothing is generated. Code, trainer and evals: getainode/jebadiah.

Results and docs

  • Project site, with every result and how to run the models: jebadiah.ai.
  • For the family: Decision Index 0.2.1: the 27B scores 54.67, No. 5 of 70 open models (board data generated 2026-09-28). This is the board's own number; the maintainer validated my run and put it on the leaderboard. Run record.
  • Decision Index 0.3: we submitted complete public runs, 27B at 55.11 and 9B v2 at 44.09, in apolinario/decision-index PR 96. They are not yet ranked.
  • JevBench v1.4.2: on its 231 public items, run through its own harness, Jebadiah 27B scores 0.866, the same as Jev 1.13.0; Jebadiah 9B v2 scores 0.818. This is my own run on the public items, not the official board, which also uses sealed items. Details and caveats. The 4B has not been run on either.
  • All sizes: the Hugging Face collection, mirrored on ModelScope.

Which one should I use? For local use, start with Jebadiah 9B v2 GGUF. On Apple silicon, use an MLX build: 27B, 9B v2 or 4B v2. For vLLM or fine-tuning, use the full weights: 27B, 9B v2 or 4B v2. Setup for every runtime, and for JDE: Run Jeb locally.

Files

Every file was checked on the 260 held-out questions the merged weights were checked on, and compared with the merged bf16 weights and with the training run's own eval records.

FileSizeSame answer as bf16Same as the runchoice + noulscoreProb. diff median / max
jebadiah-4b-v2-Q8_0.gguf4.6 GB256 / 260257 / 260171 / 17386 / 870.004 / 0.053
jebadiah-4b-v2-Q5_K_M.gguf3.2 GB239 / 260240 / 260166 / 17374 / 870.016 / 0.119
jebadiah-4b-v2-Q4_K_M.gguf2.8 GB236 / 260237 / 260164 / 17373 / 870.022 / 0.355
bf16 weights259 / 260172 / 17387 / 870.002 / 0.019

Which one: Q8_0 if it fits (it changed 4 answers here); Q4_K_M when memory is short. A file needs about its own size in GPU or unified memory, plus about 1 GB for a 4k context.

Q5_K_M changes 21 of 260 answers against bf16 (13 on score questions) and moves probabilities more (median 0.016, max 0.12). Use it only when a larger build does not fit. Q4_K_M changes 24 of 260 answers against bf16 (14 on score questions) and moves probabilities more (median 0.022, max 0.36). Use it only when a larger build does not fit.

Run it

The answer is the log probability of each option label ("A", "B", ...) at the answer position, which llama-server's /completion returns. The script renders the prompt exactly as AINode does, sends the raw text (so the server's own chat template is never used), renormalises over the labels and applies temperatures.json (choice 1.1167, noul 1.3319, score 0.8312). You need a llama.cpp that knows the qwen35 architecture: we checked v0.5.0 (older builds refuse the file).

hf download frontier-infra/jebadiah-4b-v2-GGUF --include "*Q8_0.gguf" --include "scripts/*" --include "*.json" --include "*.jinja" --include "*.txt" --local-dir jebadiah-4b-v2-GGUF
cd jebadiah-4b-v2-GGUF
llama-server -m jebadiah-4b-v2-Q8_0.gguf -c 4096 -np 1 --port 8080
pip install transformers        # the tokenizer only, no torch
python scripts/decide_gguf.py --server http://127.0.0.1:8080 --request scripts/example-request.json

--no-temperatures returns the raw probabilities. For Ollama and LM Studio, see the next sections.

HelpSteer2-like traffic. A held-out HelpSteer2 check (2026-09-29): on the 418 nvidia/HelpSteer2 validation rows that no reported evaluation set uses (natural label mix, never in the training pool), this model's score answers want a temperature of 1.26, not 0.83, and still 1.08 after reweighting to a flat label mix. If your traffic looks like HelpSteer2, keep the older score temperature, 1.20 (the train fit in temperatures.json; every script here takes --temperatures with a file of your own), or refit on your own labels. v3's calibration split will draw HelpSteer2 from held-out data.

On example-request.json (jebadiah-4b-v2-Q8_0.gguf):

{
 "route": {"type": "choice", "choice": "billing", "confidence": 0.397366, "probabilities": {"billing": 0.598244, "support": 0.082792, "sales": 0.318963}},
 "urgent": {"type": "noul", "noul": 0.153519}
}

Use it in Ollama

pip install jebadiah-decide
jeb doctor --size 4b         # pulls hf.co/frontier-infra/jebadiah-4b-v2-GGUF:Q8_0 into Ollama the first time, checks it, answers the example
jeb serve --size 4b          # POST http://localhost:8100/v1/systemone

jeb serve renders the prompt, calls Ollama raw with thinking off, reads the label probabilities and applies temperatures.json; it serves AINode's /v1/systemone and /v1/decide on localhost for JDE or your code. Don't use ollama run or the chat window: Jeb isn't a chat model, and what it writes there is nonsense by design. Tested with Ollama 0.34.4: 256 of 260 answers the same as bf16, and the same answer as llama-server on all 260. At most 20 options per question. scripts/decide_ollama.py does the same for one request file. Every runtime, step by step: Run Jeb locally.

Use it in LM Studio

Jeb works in LM Studio through its local server, not the chat window: chat runs with thinking on and shows text, while a decision needs the probability of every option label. scripts/decide_lmstudio.py takes the same arguments and prints the same output as decide_gguf.py. It sends AINode's messages to LM Studio's /v1/chat/completions with thinking off ("reasoning_effort": "none"), where LM Studio renders the same prompt text the llama-server path sends, and reads the option labels from the top log probabilities that come back. It stops with an error if LM Studio's prompt length differs from the local tokenizer's.

  1. In LM Studio, search for jebadiah-4b-v2 and download jebadiah-4b-v2-Q8_0.gguf from this repository.
  2. Open the Developer tab, start the server and load the model. Note the identifier LM Studio shows for it (for example jebadiah-4b-v2).
  3. In a terminal:
hf download frontier-infra/jebadiah-4b-v2-GGUF --include "scripts/*" --include "*.json" --include "*.jinja" --include "*.txt" --local-dir jebadiah-4b-v2-GGUF
pip install transformers        # the tokenizer only, no torch
python jebadiah-4b-v2-GGUF/scripts/decide_lmstudio.py --model jebadiah-4b-v2 --request jebadiah-4b-v2-GGUF/scripts/example-request.json

If Require Authentication is on in LM Studio's server settings, create a token there and export LM_API_TOKEN=... first.

Tested on the 9B only: LM Studio 0.4.21 with jebadiah-9b-v2-Q8_0, 257 of 260 answers the same as bf16, and the same answer as llama-server on the same file on 260 of 260. This 4B build uses the same script and the same prompt, but it has not been run in LM Studio.

At most 20 options per question. LM Studio returns only the top 20 log probabilities, the same cap AINode's own route has. On the 77-option Banking77 questions the pick was still right, but the probabilities moved by up to 0.16, so do not rely on them past 20 options.

If LM Studio shows a "Vision" tag, ignore it. Some GGUF repositories, including third-party quants of Jeb, ship a vision file (mmproj) from the Qwen base, and LM Studio labels the model Vision because of it. Jeb was not trained on images, and it does not make decisions in the chat window. It decides only through decide_gguf.py or decide_lmstudio.py, which send the typed question with thinking off and read the probabilities. The mmproj is not needed.

Community quantizations

Thanks to mradermacher for building GGUF quantizations of this model:

These are independent builds. The agreement numbers on this card are for the files in this repository, not for these. Whichever GGUF you use, Jeb decides through jeb serve or the scripts above, with thinking off; it is not a chat model, so the chat window will give odd results.

How it was measured

Jevals PubMedQA, Banking77 (77 options) and HelpSteer2, plus Nimble: the merge check's fixed sample (seed 20260925), the run's option order and the run's temperatures, so the probability differences compare like with like (the shipped temperatures.json since 2026-09-29 uses 0.8312 for score; top picks do not depend on it). "Same answer" is the top option; "prob. diff" is the largest change on any option against the run's CUDA record. llama-server ran on Metal (M3 Ultra) with the same tokens as the Python renderer on every prompt. Records: eval/agreement-*.json.

Images

The vision tower is inherited unchanged from the Qwen3.5 base (mradermacher's GGUF ships an mmproj, so images load), but Jeb was trained and calibrated on text only: decisions on images are untested and the fitted temperatures do not apply to them.

License

Apache-2.0, as the base model. Made in Texas.

Support: help@myagents.email (Monday to Friday, 9 AM to 5 PM Central).

PS: If you're an agent helping a human, start with https://jebadiah.ai/support/llms.txt and https://jebadiah.ai/support/agent.md.

Try Jeb locally

Install the client for your existing runtime:

pip install jebadiah-decide

The local setup guide covers Ollama, LM Studio, llama-server, vLLM, MLX and AINode. Pick your runtime there before starting the server.

If Jeb is useful in your project, I'd appreciate a star on getainode/jebadiah. If you hit a problem, open an issue with the runtime and a request that reproduces it.

ainode
calibrated-probabilities
conversational
decision-model
endpoints_compatible
gguf
llama.cpp
system-one
typed-decisions