Juicer is a locally deployable, natural-language-driven data-refinement model post-trained from Qwen3.6-35B-A3B. Its language model has 35B total parameters, with 3B activated per token. It turns cleaning recipes, filtering rules, and semantic-labeling instructions into strict tagged text or canonical JSON outputs for private data pipelines.
Evaluation on CDR-Bench.
<status>KEEP</status><clean_text>Contact for help.</clean_text>.{"helpfulness":4,"correctness":4,"coherence":4,"complexity":1,"verbosity":2}.| Item | Description |
|---|---|
| Base model | Qwen/Qwen3.6-35B-A3B |
| Architecture | Qwen3.6 MoE with a vision encoder; the language model has 35B total / 3B activated parameters |
| Post-training | Supervised fine-tuning (SFT) and reinforcement learning (RL) |
| Primary evaluated modality | Text; inherited vision capabilities were not evaluated for this release |
| Output contracts | Tagged text or task-specific canonical JSON |
| Evaluated context length | 32,768 tokens |
| Inherited context configuration | 262,144 tokens |
Data-Juicer provides a rich operator toolbox for cleaning, filtering, and preparing training data. In real data pipelines, however, users often describe refinement logic in natural language, combine several operators on the fly, or need soft semantic judgments that cannot be expressed by a single deterministic rule. Juicer is built for that gap: it follows Data-Juicer-style recipes as model instructions, keeps strict output schemas, and can run locally on private data.
Juicer combines supervised fine-tuning and reinforcement learning during post-training. Its optimization covers nearly 70 diverse operators and compositional data-refinement recipes, while also strengthening general instruction following, including format constraints, step ordering, and multiple simultaneous requirements.
Juicer is not a replacement for deterministic Data-Juicer jobs. It is most useful as a natural-language execution layer, a prototyping bridge, or a semantic operator when hand-written rules are too rigid.
The training data covers a broad Data-Juicer operator set; the CDR-Bench evaluation and examples focus on core refinement operators across:
| Type | What it means | Example |
|---|---|---|
| Atomic | Execute one mapper or one filter. | Remove URLs; keep only English text. |
| Compositional | Execute several refinement steps in one request. | Remove emails, deduplicate sentences, then normalize whitespace. |
| Order-sensitive | Respect the requested intermediate state. | Drop if too short before cleanup versus after cleanup. |
| Semantic | Apply learned labels for PII, hallucination, rubric, and safety tasks. | Redact private identifiers; return rubric scores as JSON. |
Juicer is evaluated on CDR-Bench on Hugging Face. Benchmark code and release artifacts are available from the CDR-Bench repository.
CDR-Bench tests whether language models can faithfully execute data-refinement recipes rather than merely produce fluent rewrites. It covers atomic operators, compositional recipes, order-sensitive mapping/filtering, and semantic extensions such as PII redaction and rubric scoring. Scoring is deterministic: tagged text is compared with the reference output, while structured tasks use canonical JSON matching.
We have also prepared a Juicer Playground to demonstrate Juicer’s usage and example outputs. For efficient deployment in real data workflows, the following options are recommended.
vLLM is the recommended serving option. On a single GPU with sufficient memory, start an OpenAI-compatible endpoint with:
export MODEL_ID=/path/to/juicer-model
vllm serve "$MODEL_ID" \
--served-model-name juicer \
--port 8000 \
--max-model-len 32768 \
--gpu-memory-utilization 0.90 \
--reasoning-parser qwen3 \
--language-model-only
SGLang can be used as an alternative OpenAI-compatible server:
export MODEL_ID=/path/to/juicer-model
python -m sglang.launch_server \
--model-path "$MODEL_ID" \
--served-model-name juicer \
--port 8000
For direct local loading without a serving engine:
from transformers import AutoModelForImageTextToText, AutoTokenizer
model_id = "/path/to/juicer-model"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForImageTextToText.from_pretrained(
model_id,
torch_dtype="auto",
device_map="auto",
)
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")
response = client.chat.completions.create(
model="juicer",
messages=[{
"role": "user",
"content": (
"Remove emails and return "
"<status>KEEP|DROP</status><clean_text>...</clean_text> only.\n"
"<input>a@b.com hello</input>"
),
}],
temperature=0,
extra_body={"chat_template_kwargs": {"enable_thinking": False}},
)
print(response.choices[0].message.content)
Qwen3.6 does not use /nothink as a soft switch. Disable thinking through chat_template_kwargs.enable_thinking=false when the serving stack supports it.
| Scenario | When to use it | Example instruction |
|---|---|---|
| Custom recipe cleaning | Your data team has per-row cleaning logic that users want to express in natural language. | Remove email addresses, remove duplicate sentences, then normalize whitespace. |
| Deduplicate and normalize | Web or forum dumps contain repeated sentences, irregular spacing, or light formatting noise. | Keep the first occurrence of each duplicate sentence and preserve the original meaning. |
| PII redaction | Private corpora need local preprocessing before annotation, training, or review. | Remove emails, phone numbers, addresses, IDs, and access tokens; drop rows dominated by credentials. |
| Reference-grounded cleanup | A generated answer or summary must remain faithful to a source passage. | Remove claims unsupported by the reference; drop the row if no supported claim remains. |
| Rubric JSON scoring | You need HelpSteer2-style quality labels for responses. | Return {"helpfulness":0-4,"correctness":0-4,"coherence":0-4,"complexity":0-4,"verbosity":0-4}. |
| Safety filtering | You need a local first-pass filter for unsafe actionable content. | Drop instructions for wrongdoing, self-harm, weapons, or cyber abuse; keep benign safety text. |
Juicer outputs should still be checked by deterministic validators or human review when the action is high-impact. It is not intended for unsupervised legal or compliance decisions, irreversible deletion without safeguards, or broad chat, coding, or vision benchmarking.
@misc{juicer2026,
title = {Juicer: Natural-Language Data Refinement with Qwen3.6-35B-A3B},
author = {Juicer Contributors},
year = {2026},
howpublished = {Hugging Face model release}
}
Juicer builds on Qwen3.6-35B-A3B, CDR-Bench, Data-Juicer, and Trinity-RFT. Feedback and testing are welcome. For questions or discussion, please open a discussion on the model page or leave an issue on the Data-Juicer GitHub Homepage.
9 commits
Juicer is a locally deployable, natural-language-driven data-refinement model post-trained from Qwen3.6-35B-A3B. Its language model has 35B total parameters, with 3B activated per token. It turns cleaning recipes, filtering rules, and semantic-labeling instructions into strict tagged text or canonical JSON outputs for private data pipelines.
Evaluation on CDR-Bench.
<status>KEEP</status><clean_text>Contact for help.</clean_text>.{"helpfulness":4,"correctness":4,"coherence":4,"complexity":1,"verbosity":2}.| Item | Description |
|---|---|
| Base model | Qwen/Qwen3.6-35B-A3B |
| Architecture | Qwen3.6 MoE with a vision encoder; the language model has 35B total / 3B activated parameters |
| Post-training | Supervised fine-tuning (SFT) and reinforcement learning (RL) |
| Primary evaluated modality | Text; inherited vision capabilities were not evaluated for this release |
| Output contracts | Tagged text or task-specific canonical JSON |
| Evaluated context length | 32,768 tokens |
| Inherited context configuration | 262,144 tokens |
Data-Juicer provides a rich operator toolbox for cleaning, filtering, and preparing training data. In real data pipelines, however, users often describe refinement logic in natural language, combine several operators on the fly, or need soft semantic judgments that cannot be expressed by a single deterministic rule. Juicer is built for that gap: it follows Data-Juicer-style recipes as model instructions, keeps strict output schemas, and can run locally on private data.
Juicer combines supervised fine-tuning and reinforcement learning during post-training. Its optimization covers nearly 70 diverse operators and compositional data-refinement recipes, while also strengthening general instruction following, including format constraints, step ordering, and multiple simultaneous requirements.
Juicer is not a replacement for deterministic Data-Juicer jobs. It is most useful as a natural-language execution layer, a prototyping bridge, or a semantic operator when hand-written rules are too rigid.
The training data covers a broad Data-Juicer operator set; the CDR-Bench evaluation and examples focus on core refinement operators across:
| Type | What it means | Example |
|---|---|---|
| Atomic | Execute one mapper or one filter. | Remove URLs; keep only English text. |
| Compositional | Execute several refinement steps in one request. | Remove emails, deduplicate sentences, then normalize whitespace. |
| Order-sensitive | Respect the requested intermediate state. | Drop if too short before cleanup versus after cleanup. |
| Semantic | Apply learned labels for PII, hallucination, rubric, and safety tasks. | Redact private identifiers; return rubric scores as JSON. |
Juicer is evaluated on CDR-Bench on Hugging Face. Benchmark code and release artifacts are available from the CDR-Bench repository.
CDR-Bench tests whether language models can faithfully execute data-refinement recipes rather than merely produce fluent rewrites. It covers atomic operators, compositional recipes, order-sensitive mapping/filtering, and semantic extensions such as PII redaction and rubric scoring. Scoring is deterministic: tagged text is compared with the reference output, while structured tasks use canonical JSON matching.
We have also prepared a Juicer Playground to demonstrate Juicer’s usage and example outputs. For efficient deployment in real data workflows, the following options are recommended.
vLLM is the recommended serving option. On a single GPU with sufficient memory, start an OpenAI-compatible endpoint with:
export MODEL_ID=/path/to/juicer-model
vllm serve "$MODEL_ID" \
--served-model-name juicer \
--port 8000 \
--max-model-len 32768 \
--gpu-memory-utilization 0.90 \
--reasoning-parser qwen3 \
--language-model-only
SGLang can be used as an alternative OpenAI-compatible server:
export MODEL_ID=/path/to/juicer-model
python -m sglang.launch_server \
--model-path "$MODEL_ID" \
--served-model-name juicer \
--port 8000
For direct local loading without a serving engine:
from transformers import AutoModelForImageTextToText, AutoTokenizer
model_id = "/path/to/juicer-model"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForImageTextToText.from_pretrained(
model_id,
torch_dtype="auto",
device_map="auto",
)
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")
response = client.chat.completions.create(
model="juicer",
messages=[{
"role": "user",
"content": (
"Remove emails and return "
"<status>KEEP|DROP</status><clean_text>...</clean_text> only.\n"
"<input>a@b.com hello</input>"
),
}],
temperature=0,
extra_body={"chat_template_kwargs": {"enable_thinking": False}},
)
print(response.choices[0].message.content)
Qwen3.6 does not use /nothink as a soft switch. Disable thinking through chat_template_kwargs.enable_thinking=false when the serving stack supports it.
| Scenario | When to use it | Example instruction |
|---|---|---|
| Custom recipe cleaning | Your data team has per-row cleaning logic that users want to express in natural language. | Remove email addresses, remove duplicate sentences, then normalize whitespace. |
| Deduplicate and normalize | Web or forum dumps contain repeated sentences, irregular spacing, or light formatting noise. | Keep the first occurrence of each duplicate sentence and preserve the original meaning. |
| PII redaction | Private corpora need local preprocessing before annotation, training, or review. | Remove emails, phone numbers, addresses, IDs, and access tokens; drop rows dominated by credentials. |
| Reference-grounded cleanup | A generated answer or summary must remain faithful to a source passage. | Remove claims unsupported by the reference; drop the row if no supported claim remains. |
| Rubric JSON scoring | You need HelpSteer2-style quality labels for responses. | Return {"helpfulness":0-4,"correctness":0-4,"coherence":0-4,"complexity":0-4,"verbosity":0-4}. |
| Safety filtering | You need a local first-pass filter for unsafe actionable content. | Drop instructions for wrongdoing, self-harm, weapons, or cyber abuse; keep benign safety text. |
Juicer outputs should still be checked by deterministic validators or human review when the action is high-impact. It is not intended for unsupervised legal or compliance decisions, irreversible deletion without safeguards, or broad chat, coding, or vision benchmarking.
@misc{juicer2026,
title = {Juicer: Natural-Language Data Refinement with Qwen3.6-35B-A3B},
author = {Juicer Contributors},
year = {2026},
howpublished = {Hugging Face model release}
}
Juicer builds on Qwen3.6-35B-A3B, CDR-Bench, Data-Juicer, and Trinity-RFT. Feedback and testing are welcome. For questions or discussion, please open a discussion on the model page or leave an issue on the Data-Juicer GitHub Homepage.
9 commits