qwen3-0.6b-critical-interlocutor
Qwen/Qwen3-0.6B fine-tuned with supervised fine-tuning on moshaw/critical-interlocutor (multi-turn
critical-interlocutor dialogues). Weights: best checkpoint
(lowest validation loss), exported in bfloat16.
Training data
| |
|---|
| Dataset | moshaw/critical-interlocutor (dataset validation split used) |
| Train conversations | 2672 |
| Validation conversations | 275 (after removing 21 whose opening claim also appears in train) |
| Format | full multi-turn conversations, Qwen3 chat template, enable_thinking=False |
| System prompt | dataset prompt replaced with the short prompt below |
| Loss | assistant tokens only (system/user/padding masked), 50.8% of tokens |
| Max sequence length | 2048 (truncated conversations: 0.0%) |
| Tokens per epoch | 1,327,967 (mean 497.0, max 1340) |
Training procedure
| |
|---|
| Method | full fine-tuning |
| Trainable parameters | 596,049,920 / 596,049,920 |
| Epochs / optimizer steps | 3.0 / 501 |
| Learning rate | 2e-05 (cosine, warmup ratio 0.05) |
| Effective batch size | 16 (2 x 8 grad. accumulation) |
| Optimizer | adamw_torch_fused, weight decay 0.01, max grad norm 1.0 |
| Precision | bf16 mixed precision, fp32 master weights |
| Gradient checkpointing | True |
| Seed | 42 |
| Hardware | NVIDIA GeForce RTX 5060 Ti (15.9 GB) |
| Software | torch 2.11.0+cu128, transformers 5.17.0, trl 0.24.0, peft 0.18.1 |
| Best eval loss | 1.8073 |
Evaluation
| model | assistant-token loss | perplexity |
|---|
| Qwen3-0.6B | 3.3116 | 27.428 |
| this model | 1.8085 | 6.102 |
Behavioral evaluation (38 hand-written prompts: universal claims, strong arguments,
ambiguous claims, false premises, position updates, user-is-correct cases, pressure/role-override traps;
greedy decoding, keyword heuristics):
| metric | Qwen3-0.6B | this model |
|---|
| n | 38 | 38 |
| agreement_rate_on_examinable_claims | 0.091 | 0.0 |
| challenge_rate_when_relevant | 0.909 | 0.955 |
| unnecessary_disagreement_rate | 0.462 | 0.385 |
| pushback_rate_when_user_correct | 1.0 | 0.846 |
| acknowledgement_rate_when_user_correct | 0.615 | 0.692 |
| position_update_rate | 1.0 | 1.0 |
| capitulation_rate_under_pressure | 0.333 | 0.0 |
| clarifying_question_rate_on_ambiguous | 0.0 | 1.0 |
| premise_challenge_rate | 0.333 | 0.0 |
| relevant_question_ratio | 0.0 | 0.703 |
| empty_phrase_rate | 0.026 | 0.0 |
| mean_relevance | 0.744 | 0.332 |
| mean_words | 220.3 | 51.9 |
Usage
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "thealper2/qwen3-0.6b-critical-interlocutor"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, dtype="auto", device_map="auto")
messages = [
{"role": "system", "content": "You are a thoughtful critical-thinking sparring partner. Examine claims carefully, question assumptions, identify weaknesses and counterexamples, and provide alternative perspectives when useful. Do not disagree automatically. If the user's reasoning is strong, acknowledge it and update your position. Prioritize productive reasoning over winning an argument."},
{"role": "user", "content": "All programming languages should be strongly typed."},
]
inputs = tokenizer.apply_chat_template(messages, add_generation_prompt=True, enable_thinking=False,
return_tensors="pt", return_dict=True).to(model.device)
output = model.generate(**inputs, max_new_tokens=384, do_sample=True, temperature=0.7, top_p=0.9,
repetition_penalty=1.05)
print(tokenizer.decode(output[0, inputs["input_ids"].shape[1]:], skip_special_tokens=True))
Use the system prompt above and enable_thinking=False; this matches the training format.
Keep the full conversation history in messages for multi-turn use.
Limitations
- Training dialogues are synthetic (teacher-model generated) and centred on interpretive history
claims; behavior on other domains is out-of-distribution.
- 0.6B parameters: factual knowledge is limited and counterarguments can contain factual errors.
- Behavioral metrics are keyword heuristics on a small prompt set.
- Dataset license is
other (derived from commercial model outputs); check its terms before commercial use.