--- license: apache-2.0 base_model: Qwen/Qwen3.5-2B base_model_relation: finetune tags: - multilingual - decision-model - classification - qwen3_5 - custom-code - pytorch - rocm --- ![Open Decision Foundation Models — Sol-2B](assets/decision-sol-2b-header.png) # Decision-1.0-Sol-2B *Sol, Latin for sun.* Give Sol a state, questions and possible answers. It returns decisions and probabilities with labels defined at runtime. [Decision family](https://huggingface.co/collections/llm-semantic-router/decision-10-6ab12177bd0002394d8409f9) | Type | Use it for | Output | |---|---|---| | **Choice** | Route a request or choose among 2–255 actions. | Selected ID + distribution | | **Noul** | Check a condition against supplied evidence. | P(true) | | **Score** | Apply 2–10 ordered rubric descriptions. | Expected index + distribution | ## Measured capability **66.32% weighted accuracy** across 3,766 decisions and 54 tasks. Compare decision, reading and transfer capabilities in the complete results below. | Model | Size | Decisions | Composition | Reading | Inference | Transfer | Overall | |---|---:|---:|---:|---:|---:|---:|---:| | Sol-2B | 2B | 73.75 | 46.08 | 76.56 | 84.17 | 57.07 | 66.32 | | Lux-9B | 9B | **84.17** | **52.75** | 89.69 | **91.25** | 77.63 | **77.22** | | Nox-4B | 4B | **83.00** | **51.79** | 79.06 | **86.25** | 69.60 | **73.09** | | Kev-9B | 9B | 76.75 | 45.75 | 86.72 | 83.54 | 79.25 | 71.89 | | Kev-4B | 4B | 71.90 | 48.54 | 81.88 | 84.58 | 76.10 | 70.09 | | Qwen3.5-9B | 9B | 73.91 | 44.62 | 89.84 | 79.58 | 73.23 | 69.73 | | Decider | 2B | 64.01 | 46.58 | 92.03 | 84.38 | 69.31 | 67.71 | | Qwen3.5-4B | 4B | 69.89 | 43.33 | 87.97 | 79.79 | 68.83 | 67.29 | | Eos-0.8B | 0.8B | 65.94 | 46.04 | 70.31 | 81.67 | 52.01 | 61.89 | | Kev-0.8B | 0.8B | 60.14 | 42.29 | 67.81 | 68.75 | 61.19 | 58.28 | | Qwen3.5-2B | 2B | 57.12 | 39.00 | 73.75 | 72.29 | 56.31 | 57.24 | | Kai-0.6B | 0.6B | 57.96 | 40.83 | 54.69 | 69.79 | 48.37 | 53.52 | | Laya · English | 0.421B | 56.54 | 35.33 | 51.41 | 63.75 | 53.06 | 51.03 | | Laya · Multilingual | 0.322B | 47.25 | 38.92 | 50.78 | 57.29 | 47.13 | 47.19 | | Jev | — | 79.10 | 66.38 | 94.53 | 89.79 | 87.19 | 81.05 | Accuracy (%). Overall weights: Decisions **30%**, Composition **25%**, Reading **15%**, Inference **15%**, Transfer **15%**. These outcome-informed product-priority weights were chosen after observing results. Bold marks a Decision-family cell above every external open or untuned reference; Jev and other Decision models are excluded. ![Decision model ranking](assets/decision-ranking.png) ![Capability matrix](assets/decision-matrix.png) [All 54 tasks](TASKS.md) · [Probability, order and missing-evidence diagnostics](DIAGNOSTICS.md) · [Methods and uncertainty](EVALUATION.md) ## More questions, measured ![Question-count latency](assets/decision-question-scaling.png) Distinct Choice questions at a fixed **499 input tokens per question**. Thirty measurements per point across six independently loaded processes on an otherwise idle AMD gfx942 GPU. Python request latency includes tokenization and inference; loading and network are excluded. [p50, p95 and memory](QUESTION-SCALING.md). ## Use Sol-2B Use the [official TypeSafe Python SDK](https://docs.typesafe.ai/sdk/python/usage) with your SystemOne-compatible endpoint, configured to serve `Decision-1.0-Sol-2B`. Replace the example URL and API key with your own. ```bash pip install typesafe-sdk ``` ```python from typesafe_sdk import Choice, Noul, TypeSafeClient with TypeSafeClient( api_key="YOUR_ENDPOINT_API_KEY", base_url="https://your-decision-endpoint.example", model="Decision-1.0-Sol-2B", ) as client: result = client.system_one( state="Customer reports a duplicate charge and asks for a refund.", questions={ "route": Choice( instructions="Which team should handle this request?", criteria={"billing": "Payments and refunds", "technical": "Product faults"}, ), "refund_requested": Noul(instructions="Did the customer request a refund?"), }, ) print(result.choices["route"].choice) print(result.nouls["refund_requested"].noul) ``` The same request with curl: ```bash curl -X POST 'https://your-decision-endpoint.example/v1/systemone' \ -H 'Authorization: Bearer YOUR_ENDPOINT_API_KEY' \ -H 'Content-Type: application/json' \ --data-raw '{ "model": "Decision-1.0-Sol-2B", "state": "Customer reports a duplicate charge and asks for a refund.", "questions": { "route": { "type": "choice", "instructions": "Which team should handle this request?", "criteria": { "billing": "Payments and refunds", "technical": "Product faults" } }, "refund_requested": { "type": "noul", "instructions": "Did the customer request a refund?" } } }' ``` [Typed request and response guide](USAGE.md) · [Model runtime requirements](RUNTIME.md) The complete state, question and candidates must fit 16,384 tokens; overflow is rejected. The bundled normalization profile loads automatically. AMD gfx942 is validated; CPU/MPS are unsupported and NVIDIA is unqualified. Use a fresh Python process when switching profiles. ## Architecture ![Decision decoder architecture](assets/architecture.png) A causal Qwen3.5 text backbone combines gated linear and full attention. A shared candidate head reads candidate endpoints and the final query vector. Each question uses one forward pass; questions run independently in batches of eight. [Candidate head](assets/readout.png) · [Vector architecture](assets/architecture.svg) · [Inference code](code/decision_model.py) Adapted from [Qwen3.5-2B](https://huggingface.co/Qwen/Qwen3.5-2B). It evaluates supplied evidence without live retrieval; confidence does not guarantee correctness. [License](LICENSE) · [Attributions](ATTRIBUTIONS.md).