CoolFace
Modelpublic

TokenRhythm/NeoHorse-Jev-4B-GGUF

sourceHugging Faceapache-2.0updated 2d agoView on Hugging Face
3likes1.1kdownloads
Model Card

<div align="center"> <h1>NeoHorse-Jev-4B-GGUF</h1> <p><b>Prefill-only decisions for agent workflows · GGUF edition</b></p> </div>

<div align="center"> <a href="https://github.com/TokenRhythm/NeoHorse"><img alt="GitHub" src="https://img.shields.io/badge/GitHub-NeoHorse-181717?logo=github&logoColor=white"></a> <a href="https://huggingface.co/collections/TokenRhythm/neohorse-jev"><img alt="Hugging Face" src="https://img.shields.io/badge/Hugging%20Face-Models-FFD21E?logo=huggingface&logoColor=000000"></a> <a href="https://www.modelscope.cn/models/TokenRhythm/NeoHorse-Jev-4B"><img alt="ModelScope" src="https://img.shields.io/badge/ModelScope-Models-624AFF?logo=modelscope&logoColor=white"></a> <a href="https://tokenrhythm.ai/"><img alt="Company" src="https://img.shields.io/badge/Company-TokenRhythm-F97316?logo=homeassistant&logoColor=white"></a> <a href="https://x.com/opensquilla"><img alt="Twitter / X" src="https://img.shields.io/badge/Twitter%20%2F%20X-OpenSquilla-111827?logo=x&logoColor=white"></a> <a href="https://www.apache.org/licenses/LICENSE-2.0"><img alt="License: Apache-2.0" src="https://img.shields.io/badge/License-Apache--2.0-64748B"></a> </div>

<p align="center"> <a href="https://huggingface.co/TokenRhythm/NeoHorse-Jev-4B">Original Model</a> · <a href="https://huggingface.co/TokenRhythm/NeoHorse-Jev-4B-GGUF/tree/main">GGUF Files</a> · <a href="#deployment">Deployment</a> </p>

Introduction

NeoHorse-Jev-4B-GGUF is the GGUF release of **NeoHorse-Jev-4B**, a 4B structured decision model from TokenRhythm, built on NeoHorse-1-4B. Given a state and application-defined questions, it uses prefill-only inference to predict decisions and their probabilities for routing requests, selecting tools, checking conditions, and rating outcomes.

Decision typeWhat it returnsTypical uses
ChoiceA selected option and the full candidate probability distributionRequest routing, tool selection, action selection
NoulThe probability of a yes/no condition being true, P(true)Condition checks, filtering, workflow gates
ScoreA distribution over ordered levels and their expected valueQuality ratings, severity, priorities

This repository provides BF16 weights and Q8_0, Q4_K_M, Q3_K_M, and Q2_K quantized downloads. Each GGUF contains the language backbone, visual weights, decision head, and tokenizer configuration. Download one GGUF plus the shared `runtime/` directory; no separate mmproj or original model weights are needed. The supplied runtime supports text requests and requests combining one image with text.

For the full model introduction, comparisons, and usage guide, see the original model. This page covers GGUF quantization results, file selection, and deployment.

Decision Demos

NeoHorse-Jev-4B six-demo grid

Six decision demos: Tetris, Snake, robot manipulation, Mahjong, four-player bomb arena, and autonomous driving, from left to right and top to bottom. Each panel preserves the original replay and decision displays and loops independently.

These decision demos feature the original NeoHorse-Jev-4B.

Evaluation

GGUF Quantization Results

Start with Q4_K_M: its complete file is 3.39 GB, about 63% smaller than BF16, with a three-benchmark average of 83.77%.

VersionComplete file size (GB)NimbleVitaminCMASSIVEAVG
BF169.11<ins>87.23</ins>77.1385.7183.36
Q8_05.1787.5976.7986.0083.46
**Q4_K_M**3.39<ins>87.23</ins><ins>77.80</ins><ins>86.29</ins>83.77
Q3_K_M2.9585.4677.9687.43<ins>83.62</ins>
Q2_K2.6084.0474.4684.5781.02

Scores are accuracy (%). AVG is the unweighted mean of Nimble, VitaminC, and MASSIVE, evaluated on 282, 599, and 350 examples respectively. Bold marks the best score in each column; <ins>underline</ins> marks the second-best. File sizes use decimal GB.

<details> <summary>Original model comparisons</summary>

The following results are from the original model card, updated September 24, 2026. NeoHorse-Jev-4B scores 77.70 on the six-group text aggregate, the highest among the four open-weight decision models with complete results in this comparison. Its mean accuracy across Nimble, VitaminC, and MASSIVE is 83.26%, 11.50 percentage points above NeoHorse-1-4B.

The original model uses vLLM for JevBench, Kev, and OpenJev; the other three benchmarks retain the fixed-subset evaluation results.

ModelJevBenchKevOpenJev textNimbleVitaminCMASSIVEAVG
Open-Jev-9B77.1377.8765.39<ins>80.50</ins>68.2884.86<ins>75.67</ins>
Kev-4B73.71<ins>81.47</ins>54.7573.4076.4685.7174.25
Laya English55.8261.3040.0745.0478.6368.5758.24
Laya Typed Decisions------48.94<ins>78.30</ins>65.43--
[NeoHorse-1-4B](https://huggingface.co/TokenRhythm/NeoHorse-1-4B)------69.1563.2782.86--
[NeoHorse-Jev-4B](https://huggingface.co/TokenRhythm/NeoHorse-Jev-4B)<ins>75.73</ins>81.92<ins>58.74</ins>87.2377.13<ins>85.43</ins>77.70

Bold and <ins>underline</ins> mark the best and second-best scores among the listed open-weight models; -- means no result is available. AVG weights the six groups equally and ranks only models with complete results; image and game results are excluded. See the original evaluation section for protocols, detailed results, image understanding, and interactive tasks.

</details>

Download

Download Q4KM and its supporting files from Hugging Face:

bash
pip install huggingface_hub
hf download TokenRhythm/NeoHorse-Jev-4B-GGUF \
  --include 'NeoHorse-Jev-4B-Q4_K_M.gguf' 'runtime/*' 'LICENSE*' 'README.md' 'SHA256SUMS' \
  --local-dir neohorse-jev-gguf

Replace Q4_K_M with another linked precision from the table to use that version. Each GGUF file is a complete alternative, not a shard; choose one.

Deployment

Use the NeoHorse GGUF runtime included in this repository. It reads all model weights from the same GGUF and provides Jev's Python decision interface. The included llama.cpp-based decision adapter supports local Python and command-line inference. For vLLM, SGLang, or native HTTP deployment, use the original model and its deployment guide.

Build and Run with llama.cpp

Tested environment: Linux x86-64 with an NVIDIA SM90 GPU, Python 3.12, CUDA toolkit 12.4, GCC 11, PyTorch 2.8.0, and Transformers 5.17.0. Install git, CMake, a C++ compiler, and the CUDA toolkit, then build from source for the target GPU.

bash
cd neohorse-jev-gguf
python -m venv .venv
source .venv/bin/activate
pip install -r runtime/requirements.txt

# Set this to your GPU's compute capability; 90 is the tested configuration.
python runtime/build.py --cuda-arch 90

# Run the bundled text decision example.
CUDA_VISIBLE_DEVICES=0 python runtime/example.py \
  --model NeoHorse-Jev-4B-Q4_K_M.gguf

The build downloads a pinned llama.cpp revision. Inference uses the local GGUF and requires no base-model download.

Quick Decisions with Python

One user message, three decisions: a yes/no probability, a selected option, and an ordered rating. After building the runtime, run this example from neohorse-jev-gguf/. Text requests can contain multiple questions; the current GGUF runtime evaluates them sequentially.

python
import sys
sys.path.insert(0, "runtime")
from runtime import NeoHorseGGUF

model = NeoHorseGGUF("NeoHorse-Jev-4B-Q4_K_M.gguf")
try:
    result = model.predict({
        "state": "I was charged twice for the same order. Please refund the extra charge today.",
        "questions": {
            "refund": {
                "type": "noul",
                "instructions": "Is the user requesting a refund?"
            },
            "team": {
                "type": "choice",
                "instructions": "Which team should handle this message?",
                "criteria": {
                    "billing": "Bills, charges, or refunds",
                    "technical": "Product failures or technical issues",
                    "other": "Other matters"
                }
            },
            "urgency": {
                "type": "score",
                "instructions": "How soon does the user want this resolved?",
                "criteria": ["Can wait", "This week", "Today"]
            }
        }
    })
    answers = result["answers"]
    print("Noul / refund probability:", answers["refund"]["noul"])
    print("Choice / team:", answers["team"]["choice"])
    print("Candidate probabilities:", answers["team"]["probabilities"])
    print("Score / urgency:", answers["urgency"]["score"])
finally:
    model.close()

Noul returns P(true). Choice returns the selected option and its probability distribution. Score returns the expected level, weighted by the level probabilities. The three criteria above have indices 0, 1, and 2, and the score can be fractional. Applications can read these fields directly to set routing and priorities.

Image and Text Decisions

The bundled example selects the dominant color of a local image from a fixed candidate set:

bash
CUDA_VISIBLE_DEVICES=0 python runtime/example.py \
  --model NeoHorse-Jev-4B-Q4_K_M.gguf --image example.png

For a custom request, pass a local PIL.Image as the second argument to model.predict(request, image). Image mode accepts one image and one question. See `runtime/example.py` for the complete request.

<details> <summary>Runtime limits and implementation details</summary>

  • —Text: state up to 384 tokens; packed branch per question up to 1,024 tokens; packed input up to 2,048 tokens.
  • —Image: one image up to 4 megapixels; 64–1,024 visual tokens; state up to 2,048 tokens; packed text up to 8,192 tokens; expanded context up to 12,288 tokens. Oversize inputs are rejected.
  • —Serving: one call per instance at a time; close the model to release GPU memory. Switching between text and image modes reloads the native engine.
  • —Precision: only the language backbone is quantized. Visual weights remain BF16 with selected FP32 tensors; the decision head remains FP32. Q4KM, Q3KM, and Q2K share a training-input importance matrix; BF16 and Q80 do not use it. No visual fine-tuning was performed.
  • —Build: llama.cpp is pinned to 94256114c229674ef96e76eb2dea596e65b43818. The supplied loader change skips visual and decision-head namespaces in the language loader; the visual loader and Python readout access those tensors from the same GGUF. No second weight file is extracted; only small tokenizer configuration files are temporarily materialized.

</details>

License and Acknowledgments

Model weights are released under Apache-2.0. NeoHorse-Jev builds on NeoHorse-1-4B; this repository converts and packages the Jev model for GGUF inference.

We thank Jared Palmer for open-sourcing Kev, from which parts of the decision runtime are adapted, and llama.cpp for the GGUF inference foundation. Their accompanying license and attribution notices are preserved. See `SHA256SUMS` for file integrity checks.

For questions and bug reports, use NeoHorse Issues.