Instructions to use fexeak/mini-judge-v1 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use fexeak/mini-judge-v1 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="fexeak/mini-judge-v1") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("fexeak/mini-judge-v1") model = AutoModelForCausalLM.from_pretrained("fexeak/mini-judge-v1", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=256) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use fexeak/mini-judge-v1 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "fexeak/mini-judge-v1" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "fexeak/mini-judge-v1", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/fexeak/mini-judge-v1
- SGLang
How to use fexeak/mini-judge-v1 with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "fexeak/mini-judge-v1" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "fexeak/mini-judge-v1", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "fexeak/mini-judge-v1" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "fexeak/mini-judge-v1", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use fexeak/mini-judge-v1 with Docker Model Runner:
docker model run hf.co/fexeak/mini-judge-v1
mini-judge-v1
一个只有 0.6B 的询问形态判定器:输入助手最后一条回复,判断它是在「给用户出互斥选项」、「用散文提问」、还是「没在等用户拍板」。
它只判形式,不判该不该问。
标签
| verdict | 含义 |
|---|---|
use_tool |
回复在给用户 2-4 个互斥方案(编号/符号列表、A/B、① ② ③、方案一/方案二、「我的建议是 A。同意吗?」) |
prose_ok |
确实在等用户输入,但答案是开放的/单值的/需要解释/裸的是非确认 |
no_ask |
没在等用户拍板(陈述、汇报、纯说明) |
调用方式
系统提示固定(与服务端逐字节一致,改一个字都需要重训):
你是询问形态分类器。输入是助手最后一条回复,判断它的询问形态。
只输出一行 JSON,不要解释:
{"verdict":"use_tool|prose_ok|no_ask"}
- use_tool:要让用户在 2-4 个互斥方案里选一个(多选也算)。包括:编号/项目符号/字母/圈号列表给出可选方案、(A)(B)、① ② ③、方案一/方案二、选 A 还是 B、两个具体替代方案的对比(维持现状 vs 把上限调小),以及给出了推荐项还问「同意吗/对吧」的确认(我的建议是 A。同意吗?)。
- prose_ok:确实在等用户输入,但不是互斥方案选择——开放问句、单值事实、需要解释、裸的是/否确认(是否需要我继续?这样可以吗?);列表里每一项都是问句(1. …对吗?2. …?)也算这一类。
- no_ask:没有在等用户拍板(陈述结论、汇报完成、纯说明)。
判断关键:列出来的每一项是「互斥选项」还是「说明/改动项」。选项就是 use_tool,改动项就是 prose_ok 或 no_ask。
例(use_tool:列出的东西是可以互相替代的选项):
你选 A 还是 B? -> use_tool
下一步走哪条?① 全量迁移 ② 分批迁移 ③ 先写文档 -> use_tool
宽屏你想维持 1~2 列,还是把上限设小一点出 3 列? -> use_tool
我的建议:**A**(改动最小)。同意吗? -> use_tool
两个方向:方案一 走缓存,方案二 直读。选哪个? -> use_tool
例(prose_ok:等的是回答,不是方案选择):
要不要我顺手更新一下文档? -> prose_ok
提交完成。是否需要我继续 git push? -> prose_ok
你有新的 API key 吗? -> prose_ok
1. 依赖关系正确吗?2. 全部 AFK 没问题?3. 需要拆分吗? -> prose_ok
改动清单如下:- 接入新网关 - 补文档 - 加回归测试,可以吗? -> prose_ok
例(no_ask:没在等拍板):
我按方案一改完了,测试全过。 -> no_ask
嘿!有什么我可以帮你的吗? -> no_ask
输入:<assistant_reply> 包裹的回复正文,正文先取最后 3,000 个 Unicode 码点再包裹。
输出:只输出一行 {"verdict":"..."},max_tokens=32。
上面的提示原文也以 system_prompt.txt 随仓库发布(与训练/服务逐字节一致,已 rstrip),代码里请直接读它,不要手抄——抄错一个字等于换了个模型。
Transformers
import json, torch
from huggingface_hub import hf_hub_download
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "fexeak/mini-judge-v1"
system_prompt = open(hf_hub_download(model_id, "system_prompt.txt"), encoding="utf-8").read()
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.bfloat16, device_map="cuda")
# transformers ≥ 4.56 可用 dtype=torch.bfloat16(torch_dtype 已弃用但向后兼容)
reply = "下一步走哪条?① 全量迁移 ② 分批迁移 ③ 先写文档"
user = f"<assistant_reply>{reply[-3000:]}</assistant_reply>"
msgs = [{"role": "system", "content": system_prompt}, {"role": "user", "content": user}]
prompt = tok.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True,
enable_thinking=False)
out = model.generate(**tok(prompt, return_tensors="pt").to(model.device),
max_new_tokens=32, do_sample=False)
print(json.loads(tok.decode(out[0][len(tok(prompt).input_ids):], skip_special_tokens=True)))
# {'verdict': 'use_tool'}
vLLM
vllm serve fexeak/mini-judge-v1 \
--served-model-name mini-judge-v1 \
--max-model-len 8192 \
--default-chat-template-kwargs '{"enable_thinking": false}'
max-model-len 必须 ≥ 8192:客户端通常会预留 4096 safety tokens 计算可用输出预算,声明更小会把输出钳到 1 token。
训练
| 项 | 值 |
|---|---|
| 基座 | Qwen/Qwen3-0.6B(instruct,关闭 thinking) |
| 方法 | 全参 SFT,单模型发布,无 LoRA 适配器 |
| 数据 | 约 1,160 条人工/半自动标注样本,入池 849 条 + 15% 带外负例 |
| 轮次 | 5 epoch |
评测
100 条人工金标(test / ood_project / ood_external),解析失败 0,出现思考段 0。
| 标签 | P | R | F1 |
|---|---|---|---|
| use_tool | 0.938 | 0.968 | 0.952 |
| prose_ok | 0.945 | 0.963 | 0.954 |
| no_ask | 1.000 | 0.867 | 0.929 |
同一批金标上的规则基线(只看是否出现列表结构):use_tool F1 0.429,prose_ok / no_ask 召回为 0 —— 规则分不清「互斥选项列表」和「说明性列表」,这正是本模型存在的理由。
分布细节:
| 子集 | n | use_tool F1 | prose_ok F1 | no_ask F1 |
|---|---|---|---|---|
| test | 36 | 0.919 | 0.842 | 1.000 |
| ood_project | 48 | 1.000 | 0.966 | 0.833 |
| ood_external | 16 | — | 1.000 | — |
服务端延迟(RTX 5090 + vLLM,32 token 输出上限):P50 52.5 ms / P95 91 ms / max 105 ms。
第三方加载路径已实测:transformers 4.56.1 + bf16 + 单卡,本仓库文件可直接 from_pretrained 完成推理,chat_template.jinja 能被自动加载,输出与线上 vLLM 一致。
局限
- 只判形式。回复「该不该问」不在能力范围内。
- 中文为主,英文样本较少。
- 依赖固定的系统提示与输入包装(
<assistant_reply>+ 尾部 3,000 码点截断);偏移会明显掉点。 - 输出只有一行 JSON,解析失败时应退回规则实现,不要因为判定器故障去改写用户回复。
- 上下文不要跟着 tokenizer 走:
tokenizer_config.json写的是model_max_length = 131072、config.json写的是max_position_embeddings = 40960,但训练与线上服务只按 8192 这个预算用。服务端max-model-len建议直接设 8192(客户端声明contextWindow也保持 8192),超过训练分布的输入不保证行为。 - 量化(GGUF / AWQ / GPTQ)后未做过回归验证,精度是否保持请自行用你的数据复测。
许可
本仓库(微调权重、模型卡、配置与分词器)以 Apache License 2.0 发布,全文见 LICENSE。
基座为 Qwen/Qwen3-0.6B(Apache-2.0),衍生与再分发的归属声明见 NOTICE。
使用时请保留这两份文件及其中的版权与归属信息。
- Downloads last month
- 707