AFM-D Decoder (afm_dd)

Causal System 1 decisions over a typed answer space (option-letter logits).
Site: ariacompute.com · Org: ariacompute · Hub: ariacompute/afm-dd

AFM-D Decoder is the causal track of AFM-D: SemIf direct option-letter scoring on openbmb/MiniCPM5-2B with an optional PEFT LoRA (product recipe afm-d-decoder-v2.1). It scores a text/JSON state against user-supplied options and returns a distribution — not open-ended chat, not TypeSafe Jev.

Primitive Answer space Result
Choice 2–16 options (A–P) choice, probabilities, confidence
Score 2–10 ordered levels expected score, distribution, confidence
Noul false / true noul = P(true)

Companion Encoder (Laya ModernBERT DecisionModel): ariacompute/afm-de.

Model details

Subject id afm_dd
Base openbmb/MiniCPM5-2B @ 12a3808a956f869c767195e9266b59c4d21d92e2
Method SemIf direct — read option-letter logits at the first generation position
Adapter PEFT LoRA (attention), recipe afm-d-decoder-v2.1: r=16, 3 epochs, LR 5e-5, micro-batch 1
Options 2–16 letters A–P (wider Choice rows skipped at convert/train)
Training Hard-label CE on AFM-D product corpus; shuffles option order each step (shuffle_semif_options) to avoid letter collapse
Export PEFT adapter (this repo) + optional merged Q8_0 GGUF at gguf/afm-dd-2b-Q8_0.gguf for Ollaya / llama.cpp

Checkpoint layout

adapter_config.json
adapter_model.safetensors   # or adapter_model.bin
dd_config.json
tokenizer/
gguf/afm-dd-2b-Q8_0.gguf    # optional; merged MiniCPM5 + LoRA for Ollaya

Load the adapter on the pinned MiniCPM5-2B revision with peft + SemIf / AFM-D Decoder code — not as a standalone chat GGUF unless you use the merged file under gguf/.

Intended use

  • Local typed decision scoring (Choice / Score / Noul) over a supplied state via System One HTTP or in-process subjects.
  • Offline eval and JevBench comparison via the AFM-D harness.
  • Ollaya / llama.cpp inference from the merged Q8_0 GGUF when published in this repo.

How to use

Load through Aria Engine (native AFM runtime) or Ollaya (Ollama-style local decision daemon).

Aria Engine

Native AFM runtime: CLI, POST /v1/systemone, FFI, and language SDKs. Docs: engine README. Decoder System One default port 8011.

aria-engine setup
aria-engine download afm-dd          # → ~/.ariacompute/models/afm-dd

aria-engine decide --track decoder --model-name afm-dd --file record.json
aria-engine serve --track decoder --model-name afm-dd --bind 127.0.0.1:8011

System One body (POST /v1/systemone or decide):

curl -s http://127.0.0.1:8011/v1/systemone \
  -H 'content-type: application/json' \
  -d '{
    "state": "user wants a refund",
    "questions": {
      "q1": {
        "type": "choice",
        "instructions": "Pick the best action",
        "criteria": {
          "refund": "issue a full refund",
          "deny": "deny the request"
        }
      }
    }
  }'
type criteria
choice object: option name → description
score array of 2–10 ordered level strings
noul object with true / false (optional)

Python SDK (pip install aria-engine; needs libaria-engine_ffi or ARIA_FFI_LIB):

from aria_engine import AriaEngine

eng = AriaEngine("/path/to/afm-dd", "decoder")  # or ~/.ariacompute/models/afm-dd
out = eng.systemone({
    "state": "user wants a refund",
    "questions": {
        "q1": {
            "type": "choice",
            "instructions": "Pick the best action",
            "criteria": {
                "refund": "issue a full refund",
                "deny": "deny the request",
            },
        }
    },
})
print(out["answers"]["q1"])
eng.destroy()

Also: TypeScript @ariacompute/engine-ts, Rust ariacompute-engine, Go / Flutter / Swift / Kotlin — see engine bindings/.

Ollaya

Ollaya pulls AFM-D by name and serves TypeSafe-compatible /v1/systemone. Use the AFM-D-enabled builds from ariacompute/ollaya releases (not the default ollaya-dev/ollaya channel). Weights stay on Hugging Face / ModelScope (Ollaya does not re-host).

# install from https://github.com/ariacompute/ollaya/releases (latest AFM-D build)
curl -fsSL https://raw.githubusercontent.com/ariacompute/ollaya/main/scripts/install.sh \
  | OLLAYA_REPO=ariacompute/ollaya sh
# pin a release: OLLAYA_REPO=ariacompute/ollaya OLLAYA_VERSION=0.7.5+afm-d.1.0.0
# Windows (PowerShell):
#   $env:OLLAYA_REPO='ariacompute/ollaya'; irm https://raw.githubusercontent.com/ariacompute/ollaya/main/scripts/install.ps1 | iex

# weights: HF (ariacompute/afm-dd) or ModelScope (AriaCompute/afm-dd)
# OLLAYA_HUB=huggingface|modelscope|auto  (auto → ModelScope when LANG looks Chinese)
ollaya pull afm-dd
ollaya run afm-dd --preset triage \
  "Third time this year you've double-charged me. Refund it today or I'm cancelling."

Or download a platform asset from the releases page (e.g. ollaya-linux-amd64.tar.zst, ollaya-darwin-arm64.tgz, ollaya-windows-amd64.zip), unpack, put ollaya on PATH, then pull / run as above.

HTTP (daemon default http://localhost:11435):

curl http://localhost:11435/v1/systemone \
  -H "Content-Type: application/json" \
  -d '{
    "model": "afm-dd",
    "state": "user wants a refund",
    "questions": {
      "q1": {
        "type": "choice",
        "instructions": "Pick the best action",
        "criteria": {
          "refund": "issue a full refund",
          "deny": "deny the request"
        }
      }
    }
  }'

Family notes: Ollaya repo docs/families/afm-dd.md.

Eval

Product LoRA (afm-d-decoder-v2.1) on data/eval.jsonl, n=5513 (--skip-errors); vs base MiniCPM5-2B. letter_collapse.collapsed=false (top letter B ≈35.8%).

AFM-D Decoder Base MiniCPM
Agreement 77.5% 59.5%
ECE 0.029 0.261
Brier 0.299 0.613
Task n Agree ECE
choice 2459 79.2% 0.039
noul 1706 85.9% 0.014
score 1348 64.0% 0.048

Score is the weakest task bucket. Agree / ECE / Brier are local release diagnostics; product gate = JevBench public-proxy below.

JevBench

Public-proxy board (n=231, gate Score ≥ 50.0). Not an official sealed JevBench claim.

# System Score Intel. Calib. Speed Acc. Hard
1 SemIf 84.0 74.9 87.1 90.7 81.0% 61.3%
2 Bespoke Nimble-9B 79.2 72.5 76.2 89.8 79.7% 61.3%
3 NeoHorse-Jev-4B 78.3 63.1 84.6 89.7 72.3% 45.0%
4 Kev-4B 76.9 67.2 76.7 88.3 75.8% 54.1%
5 AFM-D Decoder 76.3 57.1 84.9 91.7 68.4% 40.5%
6 AgentJev-0.6B 42.0 40.0 79.8 89.1 58.0% 36.0%
7 Laya 30.9 36.4 57.7 93.9 53.2% 27.9%

AFM-D Decoder tiers: easy 100%, standard 90.3%, hard 40.5% — beats the public-proxy gate. Near Kev on composite Score; main gap vs SemIf / Nimble is Intelligence / hard.

License

MIT

Citation / links

Downloads last month
1
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for ariacompute/afm-dd

Adapter
(27)
this model

Datasets used to train ariacompute/afm-dd