noullama

A workbench for models that decide.

Noullama runs native decision models on llama.cpp, on your machine. Give it a state and a set of typed questions. It answers with chosen options and probabilities, not paragraphs.

Free software, GPL-3.0. Packages for 64-bit Linux.

Interface preview
playground
state

questions
3 questions

No result yet. Run the decision to see the answers.

A rebuilt copy of the playground, with example answers. No inference runs on this page.

Local inference

llama.cpp loads the model and answers on your machine. The gateway listens on loopback, at 127.0.0.1:11435.

Typed answers

Each question has a type: choice, noul or score. Results carry probabilities you can act on.

HTTP when you need it

A native decision endpoint and an OpenAI-compatible adapter, so other programs can ask the same model.

Find models in the Hub

Search Hugging Face for decision models and download a GGUF, using an existing login or a session token. Each file shows a rough memory-fit estimate for your machine before you download.

Bring a llama.cpp

Point at your own llama-server, or have Noullama download an official llama.cpp build. It checks the archive against GitHub's SHA-256 digest before installing it.

Stays running in the tray

With a system tray, closing the window keeps the model and the local API running. Quitting asks first and shuts everything down cleanly.

Questions are the interface

There is no chat box. You describe the case, then ask specific questions with a known shape. Presets keep the questions, the state and its format across restarts.

choice

Picks one option from a named set, using the criteria you give it.

Returns one option with a probability for each.

noul

Answers yes or no to a single question about the state.

Returns yes and no, with probabilities.

score

Rates the state against an ordered set of levels.

Returns a distribution across the levels.

State can be plain text or JSON. Switching the editor between modes converts the representation without losing the content.

The questions are JSON, and the editors lint as you type. A preset can hold several questions, so one run can route a ticket and judge its urgency at the same time.

questions
{
  "team": {
    "type": "choice",
    "instructions": "Which team should handle this?",
    "criteria": {
      "billing": "Charges and refunds",
      "technical": "App errors"
    }
  },
  "refund": {
    "type": "noul",
    "instructions": "Is the customer asking for a refund?"
  }
}

A local gateway with two faces

While the app is open, the gateway serves native decision requests and an OpenAI-compatible chat adapter. Both bind to localhost. The gateway prefers port 11435; if another program holds it, Noullama picks a nearby free port and shows the real endpoint in the app. The managed llama-server uses port 11436.

POST/v1/systemone

Native request: a state and typed questions.

POST/v1/chat/completions

OpenAI adapter. One user message holding the JSON request.

GET/v1/models

Lists the model the gateway is serving.

GET/health

Health check for the gateway.

terminal
curl http://127.0.0.1:11435/v1/systemone \
  -H 'Content-Type: application/json' \
  -d '{
    "state": "I was charged twice. Please refund the duplicate payment.",
    "questions": {
      "refund": {
        "type": "noul",
        "instructions": "Is the customer asking for a refund?"
      }
    }
  }'

The adapter does not support chat history, tools, streaming or arbitrary chat prompts. Multi-select, extraction, estimates, boxes and video are not part of this integration. Native clients can send image data URLs when the model, runtime and projector support them. Local clients need no API key, and the gateway rejects foreign browser origins.

Build it from source

Prefer a package? The download page has a .deb and an .rpm. Otherwise the repository builds the desktop app for your own machine.

  1. Install the toolchain

    Node.js 22 or newer, Rust, Blaze, the Hugging Face CLI, and a llama.cpp build that includes PR #31275 for Liquid d1-2B. On Linux, the Tauri prerequisites include GTK 3 and WebKitGTK 4.1 development packages.

  2. Clone, install, run

    shell
    git clone \
      https://github.com/parasite6/noullama.git
    cd noullama
    npm install
    npm run desktop
  3. Load a model

    In Hub, download a GGUF, or open Models and browse for one you already have. In Runtime, point at your llama-server, or download a llama.cpp build, and set GPU layers, using 0 for CPU inference. Select the model, click Load selected, then open Playground.

A standalone binary can be built with npm run desktop:build. On Linux it lands in src-tauri/target/release/noullama. Standalone builds include the frontend and need no Vite server.

Where the project stands

Noullama is a prototype. The source is public under GPL-3.0, and tagged releases publish .deb and .rpm packages for Linux. There is no bundled runtime.

It loads one model, runs one model download and one runtime installation at a time. Downloads cannot be cancelled from the interface, and the playground does not keep a history. Named custom presets do persist.