--- license: apache-2.0 tags: - yev - decision-model --- # yev The client for [Yev-Decision-1](https://huggingface.co/HallD/Yev-Decision-1), a local **System One** decision model. Give it a state, which can be text, images or both, plus named questions. It returns a typed probability distribution for each one: a **Choice** between options, a **Score** on an ordered scale, or a **Noul** (yes or no). It generates no text and nothing leaves the machine. ## Install ```sh uv add "yev[inference] @ git+https://huggingface.co/HallD/yev" ``` `pip install "yev[inference] @ git+https://huggingface.co/HallD/yev"` works the same way. Python 3.13 or later. | Extra | Brings | For | | --- | --- | --- | | *(none)* | pydantic, huggingface-hub, numpy | Question and answer types only | | `inference` | torch, transformers, peft, accelerate, pillow | Answering questions with a model | | `quantized` | `inference` plus bitsandbytes | `quantize4bit=True` on a CUDA GPU | ## Use ```python from yev import Choice, Image, Noul, Score, YevClient with YevClient() as client: # YEV_DEFAULT_MODEL, else HallD/Yev-Decision-1 response = client.system_one( state="I was charged twice. Please fix this ASAP.", questions={ "billing": Noul(instructions="Is this ticket about billing?"), "tone": Choice(instructions="What is the customer's tone?", criteria={"calm": None, "frustrated": None, "angry": None}), "urgency": Score(instructions="How urgent is this ticket?", criteria=["can wait", "this week", "today"]), }, ) print(response.nouls["billing"].noul, response.choices["tone"].probabilities) ``` The first call downloads the model and its backbone, [`Qwen/Qwen3.5-4B-Base`](https://huggingface.co/Qwen/Qwen3.5-4B-Base) at a pinned revision, into the Hugging Face cache. After that it runs offline (`HF_HUB_OFFLINE=1`). The backbone runs in bfloat16; its weights and the adapter take about 10.4 GB. The call shape follows the TypeSafe SDK (0.7.5): `YevClient` and `AsyncYevClient` take its `system_one(state, questions, model=, assets=, response_model=)`, its question objects (TypeSafe's own are accepted), and return its answer and response types. It runs in-process, so there are no API keys, retries or timeouts; Box questions are refused, and a Score takes at most 10 levels. `yev --export HallD/Yev-Decision-1 --state "I was charged twice." --noul billing "Is this ticket about billing?"` asks from the command line. ## JevBench `examples/jevbench_adapter.py` is an adapter for the [JevBench](https://github.com/fstandhartinger/jevbench) harness: it sends the harness's own question to `system_one` and returns the probabilities, with the input tokens the model read as `usage` (output tokens are always 0).