95 3 hours ago

pplx-decider-flash is a 4B decision model from Perplexity, built on Qwen3.5-4B

vision decision 4b
curl http://localhost:11434/v1/systemone \
  -H "Content-Type: application/json" \
  -d '{
    "model": "pplx-decider-flash",
    "state": "Hello World",
    "questions": {
      "says_hello": {
        "type": "noul",
        "instructions": "Does the state text contain a greeting?",
        "criteria": {
          "true": "The state text contains a greeting.",
          "false": "The state text does not contain a greeting."
        }
      }
    }
  }'

Models

View all →

Readme

pplx-decider-flash is a 4B decision model from Perplexity, built on Qwen3.5-4B and distilled from the pplx-decider models: the same request format and the same text and image support, at about one seventh of the size. Give it a state (text, JSON, or images) and a set of typed questions, and it returns a calibrated probability for every answer in a single forward pass. It doesn’t generate text.

It’s compatible with the Jev and System One APIs, so it works through Ollama’s /v1/systemone endpoint and ollama run --ask.

ollama pull pplx-decider-flash

Highlights

  • Most of the accuracy, a fraction of the size: Perplexity’s evaluation puts it at 58.88 overall on the Decision Index 0.3 (60.05 with one question per request) and 72.53 on the vision suite, against 68.09 and 77.43 for pplx-decider.
  • Built for latency: Perplexity positions it for cases where latency or cost matters more than the last points of accuracy.
  • Multimodal: decide over text, JSON, or images such as screenshots, receipts, and forms.
  • One forward pass: every option of every question is scored together, with no output tokens.
  • Apache 2.0 license

What you can build

Task You define You get back
Route a request The destinations and when each applies The chosen destination and each destination’s probability
Check a condition A yes or no question True or false, and the probability of each
Grade an answer A rubric of levels The probability-weighted level and each level’s probability
Gate an agent step A condition and the agent’s proposed action Go or no-go, with the probability of each

CLI

ollama run pplx-decider-flash --ask "Is a refund being requested?" < ticket.txt
ollama run pplx-decider-flash --ask "Which team should handle this?" \
  --choice billing="Payments and refunds" \
  --choice technical="Outages and errors" < ticket.txt
ollama run pplx-decider-flash --ask "How urgent is this?" \
  --level "Routine" \
  --level "Soon" \
  --level "Immediate" < ticket.txt

The state can also follow the model name instead of coming from stdin.

API

Decision models use Ollama’s /v1/systemone endpoint, documented here. Put the text you want judged in state and your questions in questions. Ollama builds pplx-decider-flash’s prompt for you.

Field Description
model pplx-decider-flash
state The text to judge. Use a string, or a JSON object or array for structured input.
images Optional. Base64-encoded PNG, JPEG, or WebP images shared by all questions, in request order.
questions 1 to 64 named questions. Answers come back in the same order.
keep_alive Optional. How long the model stays loaded after the request.

Every question has a type, instructions, and usually criteria:

Type criteria Answer fields
choice An object mapping each option to a description. Use null to let the option name describe itself. choice, probabilities, confidence
noul Optional. {"true": "...", "false": "..."} to describe each side. noul, the probability that the answer is true
score An array of 2 to 10 level descriptions, lowest first. Levels are numbered from 0. score (the probability-weighted level), legend, probabilities, confidence

confidence runs from 0 to 1 and shows how strongly the probabilities favor one answer. It isn’t the chance that the answer is right.

cURL

curl http://localhost:11434/v1/systemone -d '{
  "model": "pplx-decider-flash",
  "state": "Our app crashes on launch for every user since this morning'\''s update. Please fix it now.",
  "questions": {
    "urgent": {"type": "noul", "instructions": "Is this support request urgent?"},
    "team": {
      "type": "choice",
      "instructions": "Which team should handle this request?",
      "criteria": {
        "billing": "Payments, invoices, and refunds",
        "technical": "Outages, errors, and configuration",
        "sales": "Plans and upgrades"
      }
    },
    "severity": {
      "type": "score",
      "instructions": "How severe is the customer impact?",
      "criteria": ["No impact", "Minor", "Major", "Critical"]
    }
  }
}'

Response:

{
  "model": "pplx-decider-flash",
  "answers": {
    "urgent": {"type": "noul", "noul": 0.996},
    "team": {
      "type": "choice",
      "choice": "technical",
      "probabilities": {"billing": 0.001, "technical": 0.998, "sales": 0.001},
      "confidence": 0.998
    },
    "severity": {
      "type": "score",
      "score": 2.91,
      "legend": {"0": "No impact", "1": "Minor", "2": "Major", "3": "Critical"},
      "probabilities": {"0": 0.001, "1": 0.005, "2": 0.076, "3": 0.918},
      "confidence": 0.91
    }
  },
  "usage": {"input_tokens": 185, "output_tokens": 0}
}

Python

Use TypeSafe’s official Python SDK and point it at Ollama. The SDK requires an API key, but Ollama ignores it, so any value works.

pip install typesafe-sdk
export TYPESAFE_BASE_URL=http://localhost:11434
export TYPESAFE_API_KEY=ollama
export TYPESAFE_DEFAULT_MODEL=pplx-decider-flash
from typesafe_sdk import Choice, Noul, Score, TypeSafeClient

questions = {
    "urgent": Noul(instructions="Is this support request urgent?"),
    "team": Choice(
        instructions="Which team should handle this request?",
        criteria={"billing": "Payments, invoices, and refunds", "technical": "Outages, errors, and configuration", "sales": "Plans and upgrades"},
    ),
    "severity": Score(instructions="How severe is the customer impact?", criteria=["No impact", "Minor", "Major", "Critical"]),
}

with TypeSafeClient(timeout=120) as client:
    result = client.system_one(state="Our app crashes on launch for every user since this morning's update. Please fix it now.", questions=questions)

print(result.choices["team"].choice)  # technical

Images

curl http://localhost:11434/v1/systemone -d '{
  "model": "pplx-decider-flash",
  "state": "The agent wants to submit the attached form.",
  "images": ["<base64-encoded image>"],
  "questions": {
    "complete": {"type": "noul", "instructions": "Are all required fields filled in?"},
    "kind": {
      "type": "choice",
      "instructions": "What kind of document is this?",
      "criteria": {"invoice": null, "receipt": null, "contract": null, "other": null}
    }
  }
}'

Benchmarks

Accuracy reported by Perplexity, measured through the Perplexity API. See the model card for the evaluation method.

Decision Index 0.3 Joint requests One question per request pplx-decider (27B, joint)
Knowledge 42.0 41.4 56.3
Language 63.3 65.0 72.8
Retrieval 64.8 65.2 68.4
Tools 76.7 80.9 84.4
Arts 46.8 46.8 56.2
Overall 58.88 60.05 68.09

On the vision suite, with images up to 1.6 MP, it scores 72.53 (pplx-decider: 77.43).

License

Apache 2.0