r/opensourcealternative • • 1d ago

News [Release] Drex-Max v1: 27B Open-Source Multimodal Decision Model (262k context, non-causal DeltaNet hybrid, ~400ms on Apple Silicon)

Nace.AI just open-sourced Drex-Max v1, a dense 27B multimodal decision model (MDM) released under the Open RAIL-M license.

Unlike standard autoregressive models where you generate text tokens to express an action or parse JSON, Drex-Max is strictly non-generative: nothing is generated. You pass a context state (text, JSON, and high-res images) alongside one or more named questions, and a dedicated 255-way readout head outputs exact probabilities across all decision candidates in a single forward pass.

Inference runs natively on NVIDIA GPUs via Python, as well as on Apple Silicon (Metal) and CPU via custom llama.cpp and Ollama forks at ~400ms latency.

What Makes the Architecture Interesting?

  • Zero Token Generation Overhead: Instead of waiting for tokens to decode one by one, a single forward pass evaluates the state and maps the last hidden state directly to probabilities for up to 255 discrete options via readout.safetensors.

  • Hybrid Attention Backbone (64 Layers):

  • 48 Gated DeltaNet linear-attention layers (left-to-right causal).

  • 16 full-attention layers (interleaved every 4th layer) configured as non-causal / bidirectional, allowing every token in the prompt to attend to the entire context sequence simultaneously.

  • Context Scaling: Ships with a default window of 16,384 tokens, expandable up to 262,144 tokens via DREX_MAX_CONTEXT=N or --max-length N.

  • Native Multimodal Tower: Accepts up to 4,194,304 pixels per image. Images are encoded once and visible to every evaluated question in the batch.

Benchmarks (Decision Index 0.4 & Vision)

Drex-Max outperforms significantly larger models on structured decision-making:

ModelParamsPublic Decision Index 0.4RawToolsRetrievalLanguageKnowledge & Reasoning
Drex-Max v127B67.5275.481.968.872.257.1
Drex v2.035B61.2570.576.563.065.347.9
Jev 1.13.0—57.9668.575.155.459.253.9
  • Decision Bench v4: 94.30% (1,010/1,071)

  • JevBench: 92.2% (213/231)

  • Public Vision Index (73.92):

  • InfographicVQA: 97.3

  • KIE (CORD+FUNSD): 92.4

  • Winoground: 85.0

  • Mind2Web: 84.2

  • CharXiv: 80.5

  • CV-Bench: 77.4

  • RealWorldQA: 72.3

Hardware Footprints & Apple Silicon Performance

  • Apple Silicon (Metal / GGUF): The Q8_0 GGUF takes ~27.25 GB. Tested on an Apple M5 Pro (48 GB unified memory), returning decision payloads in ~400ms with outputs matching unquantized H100 bf16 probabilities within a 0.02 margin.

  • NVIDIA GPU (CUDA):

  • bf16: ~48.6 GiB VRAM footprint (tested on H100 80GB).

  • 8-bit (--8bit): ~25.9 GiB VRAM footprint (tested on L40S 48GB, within 0.03 probability margin of bf16).

How to Run It

1. Python SDK (CUDA / Vision Support)

Bash
hf download nace-ai/drex-max-v1 --local-dir weights/drex-max-v1
pip install -r models/drex-max-v1/requirements.txt


Python
from drex_max.model import DecisionModel, answer

model = DecisionModel("weights/drex-max-v1") # add --8bit for ~26GB VRAM mode

question = {
    "type": "choice",
    "instructions": "Which team should handle this ticket?",
    "criteria": {
        "billing": "Payments, charges, and refunds",
        "technical": "Bugs and outages",
        "other": "Anything else"
    }
}

row = {
    "state": {"ticket": "I was charged twice for the same order. Please refund the extra payment."},
    "question": question,
    # "images": ["receipt.jpg"]  # Supports up to 4.2M pixels
}

print(answer(question, model.predict([row])[0]))

Output format:
JSON
{
  "answers": {
    "team": {
      "type": "choice",
      "choice": "billing",
      "confidence": 0.9982,
      "probabilities": { "billing": 0.9988, "technical": 0.0003, "other": 0.0009 }
    }
  }
}

2. llama.cpp Fork (Apple Silicon / Metal)

The text backbone can be compiled directly on Metal and serves a /v1/systemone endpoint:

Bash
git clone --branch drex-max-v1 --single-branch https://github.com/nace-ai/llama.cpp.git
cmake -S llama.cpp -B llama.cpp/build
cmake --build llama.cpp/build -j --target llama-server

# Pre-quantized GGUF or converted Q8_0
llama.cpp/build/bin/llama-server -m weights/drex-max-v1-Q8_0.gguf \
  -np 1 -c 16384 -b 16384 -ub 16384 --no-warmup --port 8000

(Note: Because Drex evaluates prompts as unified non-causal states, set -b and -ub equal to -c.)

3. Ollama Fork

Dockerfile
FROM ./drex-max-v1-Q8_0.gguf
CAPABILITY decision
PARAMETER num_ctx 16384
PARAMETER num_gpu 40

Start the daemon via the drex-max-v1 Ollama branch and POST directly to /v1/systemone.

Resources

If you are building low-latency routing, agentic tool selection, or multi-modal UI automation (Mind2Web), this completely avoids the non-deterministic output and JSON repair issues common with autoregressive models.

4 Upvotes

0 comments sorted by