CoolFace
Modelpublic

sky7350/Mica-v0.1-4B

sourceHugging Faceapache-2.0updated 12h agoView on Hugging Face
22likes1.1kdownloads
Model Card

Mica v0.1 4B

Mica is a small decision model. You give it a state, a question and the allowed answers, and it returns a probability for each answer: yes/no, a choice among 2–255 options, or a score with 2–10 levels. It reads the input once and generates no text, so a decision costs one prefill.

It speaks the TypeSafe /v1/systemone format, so clients written for Jev work unchanged. It was trained on English and Korean.

  • —Base model: Qwen/Qwen3.5-4B (revision 851bf6e) with a merged rank-16 LoRA on all 32 layers
  • —Weights: `sky7350/Mica-v0.1-4B` (revision ca36594): merged BF16 safetensors and GGUF in BF16, Q80, Q6K, Q5KM, Q4KM and Q4_0
  • —License: Apache-2.0 (see NOTICE)

<p align="center"> <img src="assets/accuracy.png" alt="Decision accuracy of Mica v0.1 4B against JEV 1.13, Qwen3.5-4B, JevK5 4B, Kev 4B, Nimble 9B and Laya on six sets" width="100%"> </p>

Quick start

Code, Dockerfile and scripts: https://github.com/akivet/Mica-v0.1-4B

With Docker:

bash
docker build -t mica-v0.1-4b .
docker run --gpus all -p 8010:8010 -v mica-weights:/weights mica-v0.1-4b

The first start downloads the BF16 GGUF (9.7 GB). Use -e MICA_GGUF=mica-v0.1-4b-Q5_K_M.gguf for a smaller file. The image builds for CUDA architectures 86, 89 and 90; pass --build-arg CUDA_ARCH=... to change that.

Without Docker (Linux, CUDA 12, Python 3.10+):

bash
pip install -r requirements.txt
bash scripts/build_runtime.sh            # builds llama.cpp b11010 into ./runtime (CUDA_ARCH=86 by default)
hf download sky7350/Mica-v0.1-4B mica-v0.1-4b-BF16.gguf tokenizer.json tokenizer_config.json chat_template.jinja config.json \
   --revision ca36594cc2067c7252704f9f304cc10ef11c7c5c --local-dir weights
bash scripts/serve.sh                    # http://127.0.0.1:8010/v1/systemone

A request:

bash
curl -s localhost:8010/v1/systemone -H 'Content-Type: application/json' -d '{
  "state": "The user asked to delete the staging database. No approval has been given.",
  "questions": {"q": {"type": "noul", "instructions": "Should the agent delete it now?"}}}'

Inputs longer than 8,192 tokens are rejected with HTTP 400 rather than truncated.

JevBench

The unchanged typesafe adapter works against the local server:

bash
git clone https://github.com/fstandhartinger/jevbench && mkdir -p runs && cd jevbench
TYPESAFE_API_KEY=unused python -m jevbench.cli run --adapter typesafe --endpoint http://127.0.0.1:8010 \
  --model mica-v0.1-4b --tasks datasets/public/easy.jsonl,datasets/public/original.jsonl,datasets/public/hard.jsonl \
  --results ../runs/mica-v0.1-4b.jsonl --run-label mica-v0.1-4b

On a fresh RTX 3090 (BF16 GGUF, one request at a time) all 231 public items returned valid answers: easy 1.000, original 1.000, hard 0.649, ECE 0.064, p50 54 ms, p95 552 ms. Per-item output is in `results/public231/mica-v0.1-4b.jsonl`.

No JevBench item was used for training (exact-match and 8-gram checks against the 231 public items find none in the 77,732 training rows). Half of the public hard items, together with Kev transfer v9 and SemIf, were used to compare recipes during development and to pick the LoRA scale, which stayed at 1.0.

Results

Accuracy in %. These come from our own evaluation code with the BF16 model in PyTorch. Through the llama.cpp server and JevBench's runner, the public hard tier scores 64.9 instead of 69.5; easy and original are the same. When a model cannot take an input (language, length, format), the item counts as wrong. JEV 1.13 is TypeSafe's hosted model.

Public sets:

SetnMicaJEV 1.13Qwen3.5-4BJevK5 4BKev 4BNimble 9BLaya
JevBench easy48100.0100.0100.0100.0100.0100.097.9
JevBench original72100.098.391.793.391.791.765.0
JevBench hard11169.574.361.076.252.423.810.5
SemIf25294.498.480.286.189.393.265.1
Kev transfer v91,26469.282.066.170.573.5–53.8
MMLU-Pro10,03253.082.345.253.549.7––

Our own sets (English and Korean). The held-out set was written after training data was frozen and was not opened until training finished.

SetnMicaJEV 1.13Qwen3.5-4BJevK5 4BKev 4BNimble 9BLaya
Held-out7,32867.474.754.425.556.453.925.3
Held-out, English only3,04467.074.155.061.057.054.832.6
Held-out, Korean only4,28467.775.254.1–55.953.320.1
Dev2,22278.979.260.129.365.167.034.8
Perturbed inputs2,75277.373.351.629.648.744.520.8
Korean chat style10586.781.055.2–69.575.221.9
Long inputs, many options1,90475.677.854.118.959.936.814.2
Knowledge32281.191.965.242.268.073.939.1
Concept transfer34471.872.148.047.151.451.725.3

JevK5 is English-only and Laya accepts up to 1,024 tokens, so many of their rows above are unsupported. The long-input, chat-style and knowledge sets are close to the training distribution; read them as in-distribution numbers.

The perturbed set adds unrelated text, long padding, a buried case, reordered options and similar changes. The largest gap is a note inside the state that tells the model to pick a wrong option: Mica still gets 69.1 % right, JEV 17.5 %, Kev 31.4 %, base Qwen3.5-4B 1.0 %. The same note pointing at the right option lifts Mica to 88.7 %, so such notes still move it.

Calibration on the held-out set: ECE 5.4 %, and 2.5 % of answers are wrong with confidence of 0.9 or more (JEV: 3.8 % and 2.0 %). Full metrics are in `results/all_metrics.md`.

Latency

<p align="center"> <img src="assets/latency.png" alt="Median latency per decision on one RTX 3090: Laya 30 ms, Mica Q4KM 47 ms, Mica BF16 54 ms, Kev 4B 76 ms, JevK5 4B 99 ms, Nimble 9B 132 ms" width="100%"> </p>

RTX 3090, one request at a time, JevBench public items:

Modelp50p90
Mica Q4KM47 ms466 ms
Mica BF1654 ms526 ms
Kev 4B76 ms325 ms
JevK5 4B99 ms367 ms
Nimble 9B132 ms343 ms

The p90 comes from the hard items, whose inputs reach about 3.7k tokens.

Quantized files

On our 1,402-item calibration set, through the same server on an RTX 3090:

FileSizeAccuracyNLLSame answer as BF16
mica-v0.1-4b-BF16.gguf9.70 GB79.030.451–
mica-v0.1-4b-Q8_0.gguf5.16 GB79.390.44998.9 %
mica-v0.1-4b-Q6_K.gguf3.99 GB78.890.44997.6 %
mica-v0.1-4b-Q5_K_M.gguf3.51 GB79.320.46396.1 %
mica-v0.1-4b-Q4_K_M.gguf3.07 GB78.530.46491.5 %
mica-v0.1-4b-Q4_0.gguf2.90 GB77.530.48190.0 %

Q5KM is a good choice for an 8 GB GPU.

Demo: Tetris, Mica vs N

<p align="center"> <a href="https://github.com/akivet/Mica-v0.1-4B/tree/main/demos/tetris"><img src="assets/micavskev.gif" alt="Mica vs Kev 4B playing the same Tetris game" width="100%"></a> </p>

Mica, Kev 4B and Laya played the same Tetris-style games (same seed, same pieces, same options every move). On the easy setting Mica cleared 223 lines over three seeds against 55 for Kev and 17 for Laya, and got through all 250 pieces on two of them. The harness, logs and video renderer are in `demos/tetris` on GitHub: point it at any /v1/systemone server or Python function and run your own model against Mica.

How it works

The model is Qwen3.5-4B unchanged in shape: 32 layers, 24 of them Gated DeltaNet and 8 full attention. A LoRA of rank 16 on the attention and Gated DeltaNet projections was trained and merged, and no heads were added.

Each option gets a single-token label from a fixed list of 255 (yes/no uses the model's own "No" and "Yes"). The probability of an option is the softmax of those label logits at the answer position, divided by a temperature of 1.124 fitted on our calibration set. Several questions about the same state share its prefill.

Training used plain cross-entropy on the verified answer for one epoch (learning rate 1e-4, 5 % warmup, linear decay, batch 32). The data has about 34k source decisions and 78k rows, since most decisions appear in both a conversational and a structured wording. It covers 12 areas, including coding agents, code review, computer use, user requests, documents, policy rules, dates and quantities, routing, state tracking, games and general knowledge. Answers were checked by running code where that is possible and by sampled review elsewhere. Of three seeds, we kept the one with the best accuracy on the calibration set.

Limitations

  • —Knowledge-heavy questions: 53.0 on MMLU-Pro against 82.3 for JEV.
  • —Long English policy documents (the JevBench hard tier) are the weakest public set.
  • —Instructions planted inside the state still influence answers somewhat.