Instructions to use jiazhengli/edu_jev-0.8B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use jiazhengli/edu_jev-0.8B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("feature-extraction", model="jiazhengli/edu_jev-0.8B", trust_remote_code=True)# pip install -U transformers accelerate # Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("jiazhengli/edu_jev-0.8B", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
EDU-Jev-0.8B
EDU-Jev-0.8B is a single-pass decision model for education. You give it the material to judge (a student answer, a response, a solution, ...) and one question with K options. In one forward pass it returns one score per option. It generates no text.
It is a Qwen3.5 text backbone with a pointer head. The hidden state at each option's <opt> marker is compared with
the hidden state at the final <|decide|> marker, and the K logits come out in the order the options were given.
softmax over them is the model's distribution over the options.
Files
| file | content |
|---|---|
model.safetensors |
weights (fp32) |
config.json |
model configuration |
tokenizer.json, tokenizer_config.json |
tokenizer, with the six input markers added |
chat_template.jinja |
the input format (below) |
configuration_edujev.py, modeling_edujev.py |
model code, loaded with trust_remote_code=True |
Input format
The chat template defines the input. A request has one optional state message and exactly one question
message:
messages = [
{"role": "state", "content": {
"question": "What is 3 × 4?",
"reference_answer": "12",
"student_answer": "twelve",
}},
{"role": "question", "content": {
"type": "choice",
"instructions": "Is the student's answer correct?",
"options": ["correct", "incorrect"],
}},
]
State fields. All are optional. They are rendered in this fixed order, and empty values are skipped:
passage, context, question, reference_answer, rubric, key_points, solution_steps, text, dialogue,
student_answer, candidate_response
- A string is used as it is.
- A list becomes
- itemlines. - A dict becomes
- key: valuelines. solution_stepsis a list of steps.dialogueis a list of{"role": ..., "text": ...}turns.
Any other key is an error.
Question.
| key | values |
|---|---|
type |
choice (pick one option), score (options are score levels, listed low → high), noul (two options, yes / no) |
instructions |
what to decide |
options |
K ≥ 2 option texts (strings, or {"text": ...}) |
lang |
optional: en (default) or zh (Chinese field labels) |
label_scheme |
optional: keep the default none (plain option texts) |
Give the model the context a human grader would need, such as the question, the reference answer, the rubric or the key points. Scores are only meaningful relative to that context.
Rendered text. For the example above:
<|state|>
Question: What is 3 × 4?
Reference answer: 12
Student answer: twelve
<|question|> [choice]
Is the student's answer correct?
<|options|>
correct<opt>
incorrect<opt>
<|decide|>
Marker strings that appear inside user text are escaped, so they never act as markers.
Usage
import torch
from transformers import AutoModel, AutoTokenizer
repo = "jiazhengli/edu_jev-0.8B"
tok = AutoTokenizer.from_pretrained(repo, trust_remote_code=True)
model = AutoModel.from_pretrained(repo, trust_remote_code=True, dtype=torch.bfloat16).eval()
enc = tok.apply_chat_template(messages, tokenize=True, return_dict=True, return_tensors="pt")
with torch.no_grad():
out = model(**enc)
probs = out.logits.softmax(-1)[0] # one probability per option, in the order given
print(dict(zip(messages[1]["content"]["options"], probs.tolist())))
Batches. Render each request, then pad on the right (the tokenizer's default):
texts = [tok.apply_chat_template(m, tokenize=False) for m in batch]
enc = tok(texts, padding=True, return_tensors="pt", add_special_tokens=False)
out = model(**enc) # out.logits: [B, K_max]; slots past out.num_options[b] are -inf
The kwargs form suits OpenAI-style APIs that only accept string message content:
tok.apply_chat_template([{"role": "user", "content": ""}], state={...}, question={...}, tokenize=False)
With vLLM, pass state and question as chat_template_kwargs.
Option order. The model sees the options in display order. For more stable probabilities, you can average them
over a few option orders, for example the given order and its reverse. Keep score options low → high.
Requirements
transformerswith Qwen3.5 support (5.x).flash-linear-attentionandcausal-conv1dare optional. They speed up the linear-attention layers on GPU; without them a slower PyTorch path is used.
Limitations
- The output is a distribution over the options you provide. It is not a free-text judgement or explanation.
- Decisions on high-stakes assessments should be reviewed by a person.
License
CC BY-NC 4.0. The base model, Qwen3.5-0.8B-Base, has its own license.
- Downloads last month
- 41
Model tree for jiazhengli/edu_jev-0.8B
Base model
Qwen/Qwen3.5-0.8B-Base