Open source · decision inference

The open-source inference engine for decision models

Bulk classification and decision inference on one GPU. spinf-serve is the engine behind the hosted spinf API, free to run on your own hardware: each input is read once, every question about it is answered in the same pass, and each answer is a probability instead of generated text.

Apache 2.0 · pip install "spinf-serve[server]" · one 24 GB NVIDIA GPU
Latest news
  • 2026-10

    spinf-serve is open source: the engine behind the hosted API, under Apache 2.0. pip install "spinf-serve[server]". GitHub →

  • 2026-10

    The public container image ghcr.io/spinfinc/spinf-serve: docker run --gpus all -p 8000:8000 -v spinf-cache:/root/.cache ghcr.io/spinfinc/spinf-serve. The host needs the NVIDIA driver and the NVIDIA Container Toolkit, nothing more. The image →

  • 2026-10

    spinf-prompts: the official prompt packs (content moderation, inbound triage, product listings, reviews, entertainment metadata, brand perception) as open files any server loads. The packs →

  • 2026-10

    The spinf/moderation prompt pack for content moderation, with its paper and a public benchmark. Read the paper →

  • 2026-10

    Decision mode at scale: 750,000 news articles read against 257 prediction-market questions. Decision engine →

Why it exists

Built for our own bulk classification, published because people asked

We built this engine for our own work: a daily market index read from millions of news articles, each article asked dozens of narrow, calibrated questions. Serving engines built for chat re-read the content for every question and generate one token at a time, which made that job slow and expensive. spinf-serve reads each input once, answers every question from that read and packs many inputs into one pass on one GPU. Bulk classification is where it started and where it is strongest; the same mechanism is what is now called a decision model, a model that returns a probability over a fixed set of answers instead of a paragraph. It is not a chat server: nothing is generated unless you ask for it, and it is built for throughput rather than for the latency of one request.

Throughput

  • Each input is read once; every question about it is answered from that read.
  • Scores, not generated text: no output loop.
  • Inputs packed into 16k-token passes: about 10,000 processed tokens per second on one RTX 4090 with the 12B model, measured on the public job set in the repository.

Scores you can act on

  • A probability for each answer you allow: yes / no, a label, a level.
  • The floor of each question (the same prompt with no input) to read the lift against.
  • The same input gets the same score whatever else is in the batch, bit for bit on fp8 GPUs, so thresholds stay valid over time.

Plain to run

  • pip install, one command to serve, an OpenAI-compatible endpoint on your own NVIDIA GPU.
  • Ready-made prompt packs for common jobs, scored in the same call as your own questions.
  • The same request and response as the hosted API: a client switches by changing the base URL and the key.

Decision mode

One input, many questions, one read

Most real jobs ask many questions about the same content: intent, urgency and policy for a message; category and attributes for a product; sentiment and events for an article. Decision mode reads the content once and answers them all from that read, so each extra decision costs only its own tokens, in money and in time.

General-purpose LLM servingspinf decision mode
Unit of workOne prompt, one generated answerOne input, many questions
OutputGenerated text, parsed afterwardsA probability for each allowed answer
200 questions about one documentThe document is sent and read 200 timesThe document is read once
Cost of one more questionThe whole prompt againOnly the question’s own tokens
Thresholds and auditsDepend on sampling and on parsing the textCalibrated, reproducible scores

Output: a probability for each allowed answer.

200 questions about one document: the document is read once.

Cost of one more question: only the question’s own tokens.

Getting started

Install, serve, score

One NVIDIA GPU with 24 GB, Python 3.12 and a CUDA 13 driver, or the public container image ghcr.io/spinfinc/spinf-serve (the host needs the NVIDIA driver and the NVIDIA Container Toolkit, nothing more). The first start downloads the checkpoint and compiles its kernels; then the server answers on port 8000 with the same API as api.spinf.com. The request below is one message, a question with five intents and one template asked three ways: eight answers scored from a single read, on your server or on the hosted API.

pip install "spinf-serve[server]"
spinf-serve serve spinf/gemma-4-12b-fp8   # downloads the checkpoint on first start; serves on port 8000
curl -s localhost:8000/readyz             # 200 once the model is loaded and warm
Models

Open-weights models, as decision models

Standard instruction models become decision models in decision mode, and dedicated decision models run as they are. The calibrated checkpoints are published on the Hugging Face Hub under spinf/ and downloaded on first start; the hosted model names work as aliases. Open weights: Gemma 4 by Google DeepMind and Qwen3.8 by the Qwen team.

Gemma 4 12B

spinf/gemma-4-12b-fp8 · one 24 GB GPU · the default

Reads text, images, audio, video frames

Gemma 4 31B

spinf/gemma-4-31b-fp8 · one 48 GB GPU

Reads text, images, video frames

Qwen3.8 27B

spinf/qwen3.8-27b-int4 · one 24 GB GPU

Reads text, images, video frames

Your decision model

a fine-tune of a supported family, served by its Hugging Face path

Reads what its base model reads

Gemma is a trademark of Google LLC. The checkpoints: huggingface.co/Spinf.

Prompt packs

Ready-made decision sets, as open files

Each pack is a calibrated set of questions for a common business job, with the few decisions they add up to. The official packs live in spinf-prompts and are preloaded by the server; the same files run on the hosted API and in its playground, and any GitHub repository with a manifest is a pack source for your own server.

Content moderation

Harm categories with thresholds you set, for posts, comments and messages.

spinf/moderation

Inbound triage

Intent, urgency, sentiment, risk flags and phishing signals for emails, chats and tickets.

spinf/triage

Product listings

Category, attributes and listing compliance for product pages and listings.

spinf/products

Entertainment and media

Genre, mood, themes, content advisories and audience, from a synopsis.

spinf/entertainment

Reviews and feedback

Sentiment per aspect, feature requests and competitor mentions.

spinf/reviews

Brand perception

How a web page treats the brand you name per input, with topics for contextual advertising.

spinf/brand
The packs, their questions and calibration on GitHub →

Community packs load from any GitHub repository with a prompt-packs.json: the first is Thinking Text's news packs (oil, the market read, twelve companies), with --packs github:thinkingtext/spinf-news-pack@0.1.0. Every known pack, official and community, is listed in spinf-serve's PACKS.md; publish yours and open a "List my pack" issue to have it added.

On GitHub

The whole kit is open

The engine, the packs, the client and the agent skills are public repositories under github.com/spinfinc, and the models are on the Hugging Face Hub. Pull requests are welcome; questions, ideas and bugs go to the issues of the relevant repository (spinf-serve when in doubt), there being no forum or chat.

spinf-serve

The engine and the server: decision mode, extraction slots, media, prompt packs, the OpenAI-compatible API. Apache 2.0, on PyPI.

spinf-prompts

The official prompt packs: the questions, their calibration, fixtures and the pack format, in files any spinf-serve preloads. Every known pack, official and community, is listed in spinf-serve's PACKS.md.

spinf-client

The Python client for both servers: batching, video frames, the moderation pack with typed results. pip install spinf-client.

Agent skills

Three skills for coding agents: spinf (calling the API), spinf-serve (running the server) and spinf-packs (authoring packs). A Claude Code plugin, or skills.sh.

Run it your way

Open source, hosted or private

The same engine three ways: on your own GPUs, on demand through the spinf API, or on a private deployment we run for you.

Open source

Run the engine on your own GPUs, free, under the Apache 2.0 license. The same inference as the hosted API.

Hosted API

Decision mode on demand, paid per million input tokens, with free credit to start. No GPU to run.

Private deployment

The engine on GPUs dedicated to you, sized to your volume and deadline, run by us.

FAQ

Decision inference, explained

A language model used to choose among a fixed set of answers (yes or no, a label, an outcome, a level) and to return a probability for each, instead of writing free text. Some models are trained for it; any open instruction model can work as a decision model in decision mode.

Running a model to get decisions rather than generated text: the input is read, the answers you allow are scored, and a probability comes back for each. Nothing is generated, so a decision costs only the tokens it reads.

A chat server generates text one token at a time and treats each prompt as its own request: 200 questions about one document mean sending the document 200 times, or one long prompt whose answer you have to parse. spinf reads the document once, answers every question from that read, and returns a probability for each allowed answer. It is built for bulk work, not for the latency of a single request.

Yes. api.spinf.com runs spinf-serve. The request and response are the same, and with the calibrated fp8 checkpoints the scores are the same bit for bit on fp8 GPUs, so code, thresholds and calibrations move between the two by changing the base URL and the key.

Apache 2.0, for the engine, the server, the prompt packs and the client: free for any use, commercial included. The model checkpoints keep the terms of their base models.

Calibrated checkpoints of Gemma 4 12B and 31B and of Qwen3.8 27B, published on the Hugging Face Hub under spinf/ and downloaded on first start, and your own decision model if it is a fine-tune of a supported family. The hosted model names (spinf-12b, spinf-31b) work as aliases.

One NVIDIA GPU with 24 GB per server process (48 GB for the 31B), on your own servers or in your cloud account: Linux, Python 3.12 and a CUDA 13 driver. GPUs with fp8 tensor cores (RTX 4090 and 5090, L4, L40S, RTX 6000 Ada, H100, RTX PRO 6000) give batch-invariant scores identical to the hosted service; Ampere GPUs run with int8 weights, deterministic but not bit-identical.

Yes: ghcr.io/spinfinc/spinf-serve (tags: the version, latest) is spinf-serve from PyPI on python:3.12-slim, with nothing else baked in. docker run --gpus all -p 8000:8000 -v spinf-cache:/root/.cache ghcr.io/spinfinc/spinf-serve serves the 12B; the model downloads on first start into the /root/.cache volume, which also keeps the compiled kernels and the official packs. The host needs the NVIDIA driver and the NVIDIA Container Toolkit, nothing more, and the arguments of spinf-serve serve go after the image name.

Ready-made, calibrated sets of questions for a common job (content moderation, inbound triage, product listings, reviews, entertainment metadata, brand perception) that turn many scores into a few decisions. The official packs live in spinf-prompts and are preloaded by the server; any GitHub repository with a manifest is a pack source for your own server, and the packs run in the same call as your own questions. Every known pack, official and community, is listed in spinf-serve's PACKS.md; publish yours and open a "List my pack" issue there to have it added.

spinf-client on PyPI talks to both servers and wraps the moderation pack with typed results. Coding agents get three skills (spinf, spinf-serve and spinf-packs) as a Claude Code plugin or through skills.sh, and the docs index for agents is spinf.com/llms.txt.

Yes. The spinf API runs the same engine on demand, paid per million input tokens with free credit to start, and private deployments run it on GPUs dedicated to you.
Open source · Apache 2.0

Run it on your own GPU

pip install "spinf-serve[server]", one command to serve, and the same API as the hosted service.