Laplace-1-Atlas for Apple Silicon (MLX, 8-bit)

An MLX conversion of JuneoAI/Laplace-1-Atlas (revision cf6ea86), Juneo Lab's 27B decision model built on Qwen3.8-27B. Hand it a state, a question and a set of candidates, and it returns a probability for each candidate from one forward pass: who should own a task, who may see what, whether to act or ask first, whether a result meets the standard. It can also predict the next state of an environment you describe. This build quantises the language model to 8-bit (affine, group 64) and keeps the vision tower in bf16. Size: 29.5 GB.

Published by NetProjects (Internet Projects Ltd). Not affiliated with Juneo Lab or Alibaba Cloud.

Build Size JevBench (231 public items) Same top answer as bf16
netprojects/Laplace-1-Atlas-MLX-6bit (recommended) 22.8 GB 91.8% 231 / 231
netprojects/Laplace-1-Atlas-MLX-8bit 29.5 GB 92.2% 230 / 231
netprojects/Laplace-1-Atlas-MLX-4bit 16.1 GB 91.3% 224 / 231
netprojects/Laplace-1-Atlas-MLX-bf16 54.7 GB 91.8% reference

The 6-bit build gives the same top answer as bf16 on every JevBench item at less than half the size. The 4-bit build peaks at about 17 GB of memory in these tests.

Score candidates

A decision is one forward pass: the model reads the candidates as letters and the next-token logits of those letters give the distribution. This is Juneo's score_candidates helper, ported to mlx-lm with the same prompt.

pip install -U mlx-lm
import json, string
import mlx.core as mx
from mlx_lm import load

model, tokenizer = load("netprojects/Laplace-1-Atlas-MLX-8bit")
SYSTEM = ("Choose the supported answer from the supplied candidates. Output only its letter.\n"
          "Return exactly one supplied candidate label.")

def score_candidates(state, question, choices):
    """choices maps your own keys to candidate descriptions (up to 26)."""
    keys, letters, ids = list(choices), [], []
    for name in string.ascii_uppercase:
        t = tokenizer.encode(name, add_special_tokens=False)
        if len(t) == 1 and t[0] not in ids:
            letters.append(name); ids.append(t[0])
        if len(letters) == len(keys):
            break
    payload = {"state": state, "question": question,
               "candidates": [{"letter": l, "description": choices[k]} for l, k in zip(letters, keys)]}
    messages = [{"role": "system", "content": SYSTEM},
                {"role": "user", "content": json.dumps(payload, ensure_ascii=False)}]
    prompt = tokenizer.apply_chat_template(messages, add_generation_prompt=True,
                                           enable_thinking=False, tokenize=False)
    tokens = mx.array(tokenizer.encode(prompt, add_special_tokens=False))[None]
    logits = model(tokens)[0, -1].astype(mx.float32)
    probs = mx.softmax(logits[mx.array(ids)]).tolist()
    best = max(range(len(keys)), key=probs.__getitem__)
    return {"choice": keys[best], "probabilities": dict(zip(keys, probs))}

print(score_candidates(
    state={"permissions": ["read_records"], "request": "Delete a record."},
    question="Which decision is supported by the supplied permissions?",
    choices={"allow": "Allow the request.", "deny": "Deny the request."},
))

The probabilities are relative to the candidates you supply, not a calibrated chance of being correct. Put the rules that govern the decision in the state.

Predict the next observation

For outcome prediction, give the environment rules as the system message and the state and action as JSON, with thinking off:

mlx_lm.generate --model netprojects/Laplace-1-Atlas-MLX-8bit --max-tokens 256 \
  --chat-template-config '{"enable_thinking": false}' \
  --system-prompt 'Predict the next environment observation after the supplied action. Return only JSON.' \
  --prompt '{"state": {"owner": "operator", "open": true}, "history": [], "action": {"kind": "resolve"}}'

mlx_lm.server serves the model with an OpenAI-compatible API. The vision tower is included, so the model also loads in mlx-vlm; Juneo reports its decision results on text. Tested with mlx 0.32.4, mlx-lm 0.32.2 and mlx-vlm 0.7.11.

What was checked

On a MacBook Pro M5 Max (128 GB), 11 November 2026.

  • JevBench. The 231 public items of JevBench (easy, original and hard tiers; MIT). Each item is one candidate-scoring pass with thinking off, using a system prompt of the same form as the helper above; the highest-probability candidate is compared with the expected answer:

    Build Accuracy easy original hard Peak memory
    bf16 91.8% 48 / 48 71 / 72 93 / 111 53.2 GB
    8-bit 92.2% 48 / 48 71 / 72 94 / 111 29.2 GB
    6-bit 91.8% 48 / 48 71 / 72 93 / 111 23.0 GB
    4-bit 91.3% 48 / 48 71 / 72 92 / 111 16.7 GB
  • Agreement with bf16. On the same items, mean KL divergence from the bf16 distribution is 0.006 (8-bit), 0.008 (6-bit) and 0.079 (4-bit). On 24 further decision cases written for this check, every build picks the same candidate as bf16.

  • Source files. All 20 weight files of the upstream revision match the Hub's SHA-256 hashes.

  • Images. The 4-bit, 6-bit and 8-bit builds each describe a test image correctly in mlx-vlm.

Intended use

Laplace advises; your system decides. As Juneo's card says, keep deterministic permission checks, authentication and audit logging in place, calibrate thresholds on your own held-out decisions before automating on them, and keep a person on the final decision for irreversible, safety-critical, financial, medical or legal actions. See the original model card for the training data (Decision Forge), the full evaluation and the limitations.

License

Apache-2.0, as the original model and Qwen3.8-27B. LICENSE is the Apache-2.0 text from the upstream repository and NOTICE describes the conversion and credits Juneo Lab and Alibaba Cloud. If you use the model, please cite Juneo Lab:

@misc{juneo2026laplace1,
  title        = {Laplace-1: Causal-Interventional Decision Models for Trustworthy Agent Delegation},
  author       = {{Juneo Lab}},
  year         = {2026},
  howpublished = {\url{https://huggingface.co/JuneoAI/Laplace-1-Atlas}},
  note         = {Model family: Laplace-1-Atlas (27B), Laplace-1-Vector (4B)}
}

More MLX builds from NetProjects: huggingface.co/netprojects ยท netprojects.com

Downloads last month
-
Safetensors
Model size
27B params
Tensor type
U32
ยท
BF16
ยท
MLX
Hardware compatibility
Log In to add your hardware

8-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for netprojects/Laplace-1-Atlas-MLX-8bit

Base model

Qwen/Qwen3.8-27B
Quantized
(5)
this model

Collection including netprojects/Laplace-1-Atlas-MLX-8bit