|
Download README.md from NeelContractor/jev-decider-0.4B: direct link, hf CLI and curl.
- Browser
- Download file 4.48 kB
-
https://huggingface.co/NeelContractor/jev-decider-0.4B/resolve/main/README.md
- Command line
-
hf download hf://NeelContractor/jev-decider-0.4B/README.md
-
curl -L -o README.md https://huggingface.co/NeelContractor/jev-decider-0.4B/resolve/main/README.md
4.48 kB
| license: cc-by-nc-4.0 | |
| base_model: Qwen/Qwen3-0.6B | |
| library_name: bev-decider | |
| base_model_relation: finetune | |
| datasets: | |
| - avbiswas/bev-decision-150K | |
| pipeline_tag: text-classification | |
| tags: | |
| - system-one | |
| - decision-model | |
| - jev-compatible | |
| language: | |
| - en | |
| # jev-decider-0.4B | |
| A **0.4B-parameter System One decision model** in the bev-decider / Jev format. It reads a state (text or JSON) and typed questions about it and returns probabilities in a single forward pass, with no text generation: | |
| - **`choice`**: pick one of several named options. | |
| - **`noul`**: yes/no, returned as P(yes). | |
| - **`score`**: an ordinal level, returned as the expected value over the levels. | |
| ## Architecture | |
| This is a single self-contained model. `model.safetensors` holds the whole network in one file. | |
| | | | | |
| |---|---| | |
| | Backbone | The first **20 of 28 layers** of [`Qwen/Qwen3-0.6B`](https://huggingface.co/Qwen/Qwen3-0.6B), with the fine-tuned LoRA (r=8, alpha=16 on `q/k/v/o_proj` of layers 8-19) **merged** into the weights | | |
| | Decision head | 2-layer attention head, 512-dim, with a task-type embedding | | |
| | Parameters | About 0.4B (0.31B in the transformer layers, 0.16B token embeddings, 7.4M head) | | |
| | Weights | `model.safetensors` (bf16 backbone + fp32 head), plus `backbone_config.json`, `config.json` and Qwen's tokenizer files | | |
| | Context | Trained with states up to **512** tokens; options are limited to 64 tokens each | | |
| The head is a custom module, so the model is loaded with the [`bev-decider`](https://github.com/avbiswas/bev-decider) package. | |
| ## Usage | |
| `bev-decider` is the library; `jev-decider-0.4B` is this model. Install the library, then pass this model's repo id to `load`. | |
| ~~~bash | |
| pip install bev-decider | |
| ~~~ | |
| ~~~python | |
| from bev_decider import load | |
| decider = load("NeelContractor/jev-decider-0.4B") | |
| state = { | |
| "message": ( | |
| "URGENT: you charged my card twice this month. " | |
| "Refund the duplicate within 24 hours or I'm disputing it with my bank." | |
| ) | |
| } | |
| questions = { | |
| "intent": { | |
| "type": "choice", | |
| "instructions": "What does the customer want?", | |
| "criteria": { | |
| "refund": "money returned or a duplicate charge reversed", | |
| "technical_help": "a bug, outage or integration problem", | |
| "cancellation": "wants to cancel or downgrade", | |
| }, | |
| }, | |
| "urgent": { | |
| "type": "noul", | |
| "instructions": "Does the message communicate time pressure or a deadline?", | |
| }, | |
| "anger": { | |
| "type": "score", | |
| "instructions": "How angry is the customer?", | |
| "criteria": ["calm", "mildly annoyed", "frustrated", "furious"], | |
| }, | |
| } | |
| answers = decider.decide(state, questions) | |
| ~~~ | |
| Output: | |
| ~~~json | |
| { | |
| "intent": { | |
| "type": "choice", | |
| "choice": "refund", | |
| "probabilities": { | |
| "refund": 0.996006190776825, | |
| "technical_help": 0.0018722523236647248, | |
| "cancellation": 0.0021215397864580154 | |
| } | |
| }, | |
| "urgent": { | |
| "type": "noul", | |
| "noul": 0.8624385595321655 | |
| }, | |
| "anger": { | |
| "type": "score", | |
| "score": 1.2702370285987854, | |
| "probabilities": { | |
| "0": 0.3623242974281311, | |
| "1": 0.0982351303100586, | |
| "2": 0.4463198184967041, | |
| "3": 0.0931207537651062 | |
| } | |
| } | |
| } | |
| ~~~ | |
| ## Evaluation | |
| Held-out test split of [`avbiswas/bev-decision-150K`](https://huggingface.co/datasets/avbiswas/bev-decision-150K), 2,000 questions, single forward pass: | |
| | Metric | Value | | |
| |---|---:| | |
| | Accuracy (all) | **0.7300** | | |
| | Yes/no (`noul`) | 0.8178 | | |
| | Choice | 0.7192 | | |
| | Score | 0.5964 | | |
| | AUC (`noul`) | 0.8859 | | |
| These numbers come from the best checkpoint (step 1000 of the final run) selected by test accuracy. | |
| ## Training | |
| - Base: first 20 layers of `Qwen/Qwen3-0.6B` (weights frozen except LoRA). | |
| - LoRA: r=8, alpha=16, dropout 0, on `q/k/v/o_proj` of layers 8-19. | |
| - Head: 2 attention blocks, 512-dim, `num_task_types=3` (`choice`, `noul`, `score`). | |
| - Data: `avbiswas/bev-decision-150K` (250,262 exploded training questions). | |
| - Objective: cross-entropy over the options. | |
| - Precision: bf16 autocast, fp32 head. Optimizer: AdamW (head lr 1e-3, LoRA lr 1e-4). | |
| The exported weights are the LoRA-merged backbone plus the trained head. | |
| ## License | |
| The model is **CC-BY-NC-4.0** (non-commercial), because the training data includes sources with non-commercial terms. It contains weights derived from [Qwen3-0.6B](https://huggingface.co/Qwen/Qwen3-0.6B), which is Apache-2.0; Qwen's license is included as `LICENSE-Qwen`. | |