mstrasser's picture
Card: link the code adapters to their Hugging Face cards
86307ab verified
|
Raw History Blame Contribute Delete
6.87 kB
---
base_model: mstrasser/jeff-base
base_model_relation: adapter
library_name: gguf
license: apache-2.0
language:
- en
pipeline_tag: text-classification
tags:
- jeff
- gguf
- llama.cpp
- lora
- decision-model
- coding
---
# jeff-adapter-code-gguf
The LoRA GGUF of [jeff-adapter-code](https://huggingface.co/mstrasser/jeff-adapter-code) (Jeff **v1.3**), for
[llama.cpp](https://github.com/ggml-org/llama.cpp).
**Jeff-Code: information-gathering steps ahead of the coding model.** In the Jeff-Code agent, takes the information-gathering steps ahead of Qwen3.8-27B (reads, listings, searches) and hands over when unsure.
This repository holds only the adapter. Load it on top of the base GGUF from
[mstrasser/jeff-base-gguf](https://huggingface.co/mstrasser/jeff-base-gguf); there is no separate full model per adapter.
It works on either base format: Q8_0 (recommended, within 0.4 points of full precision on every adapter test) or Q4_K_M (within 0.4 points).
## Files
| File | What it is |
|---|---|
| `loras/code.gguf` | The LoRA (169 MB), the same file for every base format. It stays at full precision; quantisation applies to the base weights only |
| `models/code.jeff.json` | What a client needs: the answer codes and their token ids, the prompt layout (`live-last`) and the temperature fitted for each format |
`code.jeff.json` has a temperature for each format (`temperature_by_format`: f16, q8_0, q4_k_m); use the one for
your base format, so the probabilities stay calibrated.
## Results
The same rows, through llama.cpp: the base GGUF plus this LoRA GGUF, with the temperature refitted for each format. [Running Jeff with llama.cpp](https://jeffhub.ai/docs/llama-cpp)
| Test set | Full precision | Q8_0 | Q4_K_M |
|---------------|----------------|---------------|---------------|
| `development` | 90.4% 路 0.023 | 90.4% 路 0.030 | 91.0% 路 0.029 |
Run-time rule: the same action (act on the top option at 0.40, otherwise hand over). The GGUF takes the same decision as full precision on 99.9% of the 991 development rows at Q8_0 and 97.9% at Q4_K_M.
Full precision: full precision from the trainer's own evaluation on the development split.
More on the adapter's card: [mstrasser/jeff-adapter-code](https://huggingface.co/mstrasser/jeff-adapter-code).
## How to run it
Use llama.cpp commit `cb7934c52ca8710994b2ecc19775ebefcfdb8d01` or newer: it needs the `qwen35` architecture and LoRA
on the output layer.
```bash
hf download mstrasser/jeff-base-gguf --local-dir jeff-gguf
hf download mstrasser/jeff-adapter-code-gguf --local-dir jeff-gguf
cd jeff-gguf
llama-server -m models/base-q8_0.gguf -c 8192 -np 1 --lora-init-without-apply --lora loras/code.gguf
```
Jeff is not a chat model. For each decision you run one forward pass over the prompt and read the probabilities of
the answer codes; you never sample text.
1. **Build the prompt exactly as Jeff does** (the question, the state, the options as answer codes, and the changing
state field under "Latest", then the chat template with thinking off). The Jeff repository builds it for you
(`jeff.model.decision_messages`).
2. **Tokenize** without a beginning-of-sequence token, with special tokens parsed.
3. **Run one forward pass** over the whole prompt from an empty state, with this adapter active. Clear the state
between prompts: Qwen3.5 has recurrent layers, so a reused state would carry over.
4. **Read the probabilities.** Take the logits of the first N answer-code tokens (`token_ids[:N]`, N = the number of
options), divide by the temperature for this adapter and your format, and apply a softmax over those N.
With llama-server, each decision is one `POST /completion` with `"n_predict": 1`, `"cache_prompt": false`, a `lora`
list that names **every** loaded adapter (scale 1 for this one, 0 for the rest; an adapter left out of the list keeps
scale 1.0), a logit bias of +1000 on every answer-code token of the request, and `n_probs` set to the number of
options. From the llama.cpp library: load the base once with `llama_model_load_from_file`, this adapter once with
`llama_adapter_lora_init`, and per request call `llama_set_adapters_lora` with scale 1, clear the memory, decode once
and read `llama_get_logits_ith(ctx, -1)`.
The full guide, with an example prompt and request: [Running Jeff with llama.cpp](https://jeffhub.ai/docs/llama-cpp).
## Data and licence
**Adapter licence: Apache-2.0.**
**Qwen3.5-0.8B notice:** these weights were modified from [Qwen3.5-0.8B](https://huggingface.co/Qwen/Qwen3.5-0.8B) by the Jeff project: [jeff-base](https://huggingface.co/mstrasser/jeff-base) is a fine-tune of Qwen3.5-0.8B, and this adapter was trained on top of it. Qwen3.5-0.8B is Copyright 2026 Alibaba Cloud and licensed under the Apache License, Version 2.0; a copy of that licence is in [`LICENSE`](LICENSE).
**To confirm:** that the licences of the session data and of Terminal-Bench 2.0 allow training and publishing the adapter.
It was trained on:
- **[ukisai/Qwen3.8-27B-multi-turn-agent-sft (about 14,400 public Qwen3.8-27B agent sessions)](https://huggingface.co/datasets/ukisai/Qwen3.8-27B-multi-turn-agent-sft)**. Licence: To confirm (licence not confirmed yet) 路 Made by Qwen3.8-27B (the sessions); labels built by code
Jeff's option lists are rebuilt from each transcript; the label is the step Qwen took next.
**To confirm:** the licence of the ukisai data set on Hugging Face
- **openguardrails Terminal-Bench sessions of Qwen3.8-27B**. Licence: To confirm (licence not confirmed yet) 路 Made by Qwen3.8-27B (the sessions); labels built by code
Public sessions, replayed in each task's container.
**To confirm:** the licence of the openguardrails Terminal-Bench sessions
- **Terminal-Bench 2.0 tasks (outside the 40 evaluation tasks and their four near-twins)**. Licence: To confirm (licence not confirmed yet) 路 Not made by a model
The tasks our own Jeff-Code sessions and the replays run on.
**To confirm:** the Terminal-Bench 2.0 licence
- **Our own Jeff-Code sessions with Qwen3.8-27B**. Licence: Built for this adapter (made for this adapter) 路 Made by Qwen3.8-27B (local), the sessions; labels built by code
Qwen3.8-27B in Jeff-Code (bash only); Jeff logs its full option list before every turn without acting.
## Links
- The adapter at full precision: [mstrasser/jeff-adapter-code](https://huggingface.co/mstrasser/jeff-adapter-code) (revision v1.3)
- The base GGUF: [mstrasser/jeff-base-gguf](https://huggingface.co/mstrasser/jeff-base-gguf)
- Adapter card: [mstrasser/jeff-adapter-code](https://huggingface.co/mstrasser/jeff-adapter-code)
- Running Jeff with llama.cpp: [jeffhub.ai/docs/llama-cpp](https://jeffhub.ai/docs/llama-cpp)
Jeff is an independent project. It uses the same request format as Jev but is not affiliated with or endorsed by
TypeSafe, the makers of Jev.