ZeroHour
Hugging Face trending modelspublished ()ingested AlexWortega

AlexWortega/openjev — new model trending #30 on Hugging Face

infoModel releaseimportance 24
AI summary · glm-5.3-flash

AlexWortega released openjev on Hugging Face, a Qwen3.5-based NLI cross-encoder (4B and 35B-A3B MoE) for reranking, grading, and zero-shot game agents.

The openjev model repurposes Qwen3.5 into a three-label cross-encoder (entailment, contradiction, neutral) released under MIT license and trending #30 on Hugging Face. It ships a 4B sequence-classification checkpoint plus a frozen Qwen3.5-35B-A3B MoE backbone with small per-task MLP heads on the last-token latent. The author demonstrates zero-shot play of Flappy Bird and Doom from text states and raw pixels via the Qwen3.5 vision tower, with no per-task training. Included code covers training, a multiple-choice harness, replays, and raw JSON results.

  • Open-weights MIT-licensed cross-encoder with 4B and 35B-A3B MoE variants
  • Three-class NLI primitive supports reranking, grading, content guarding, and game-playing
  • Frozen 35B backbone with per-task MLP heads on last-token latents
  • Doom and Flappy Bird played zero-shot from text and pixels
  • Trending #30 on Hugging Face at publication time
Full article336 words · extracted from huggingface.co · click to collapse

# openjev — Qwen3.5 trained as jev model

<video controls src="https://huggingface.co/AlexWortega/openjev/resolve/main/videos/doom_zs_position.mp4" width="720"></video>

<video controls src="https://huggingface.co/AlexWortega/openjev/resolve/main/videos/doom_vision_zeroshot_pixels.mp4" width="720"></video>

![radar](assets/radar_openjev.png)

Bigger jev: Qwen3.5-35B-A3B (MoE) as the backbone. Zero-shot, and with the backbone frozen plus a small MLP head on the

last-token latent (`mlp_heads_35b/`, one head per task, loadable with `LatentMLPHead.load`):

![radar 35B](assets/radar_openjev_35b.png)

**openjev** is Qwen3.5 turned into a *jev* model: a single cross-encoder that reads a premise and a hypothesis and

answers with entailment, contradiction or neutral. That one primitive is enough to rerank answers, grade them against a

reference, guard content, and play games in real time: hand it the game state and a few statements about it, and the

argmax entailment is the move. Doom above is played zero-shot, first from the text state and then straight from the

pixels through the Qwen3.5 vision tower. Nothing is trained per task.

## What's inside

* `qwen3.5-4b-nli/` — the 4B jev checkpoint (`Qwen3_5ForSequenceClassification`, 3 labels: `contradiction`, `entailment`, `neutral`, last-token pooling, trained with plain cross-entropy over the three classes).

* `modeling_openjev.py` — `OpenJevCrossEncoder`: `predict`, `rerank`, `grade`, `latents`; `LatentMLPHead` for the per-task heads.

* `modeling_qwen35_moe_seqcls.py` — `Qwen3_5MoeForSequenceClassification` for the 35B-A3B backbone (transformers 5.15 ships none).

* `mlp_heads_35b/<task>/` — `head.pt` + `norm.npz` + `meta.json`, the 35B latent + MLP heads behind the second radar.

* `code/` — everything used here: the trainer, the multiple-choice harness, Flappy Bird and Doom (text and pixels), the radar.

* `videos/` — Flappy Bird and Doom replays; `results/` — raw JSON for every run and the full report.

## Use it

```python

from modeling_openjev import OpenJevCrossEncoder

jev = OpenJevCrossEncoder("AlexWortega/openjev", subfolder="qwen3.5-4b-nli")

jev.predict([("The bird is 0.05 below the centre of the gap.", "The bird is below the centre of the gap.")])

# -> [[contradiction, entailment, neutral]] probabilities

jev.rerank("Which gas do plants absorb during photosynthesis?", ["oxygen", "carbon dioxide", "nitrogen"])

# -> index of the option with the highest entailment

```

Or with plain transformers:

```python

from transformers import AutoModelForSequenceClassification, AutoTokenizer

tok = AutoTokenizer.from_pretrained("AlexWortega/openjev", subfolder="qwen3.5-4b-nli")

model = AutoModelForSequenceClassification.from_pretrained("AlexWortega/openjev", subfolder="qwen3.5-4b-nli")

text = model.config.nli_template.format(premise="...", hypothesis="...")

```

Reference point: [dleemiller's NLI cross-encoders](https://huggingface.co/blog/dleemiller/nli-xenc-ways-to-use). Licence MIT.

Text extracted automatically; images, tables and formatting may be missing. Original: https://huggingface.co/AlexWortega/openjev