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.

Public source. No release yet.

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.

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 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.

Build it from source

There is no installer to download yet. 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 Models, download a GGUF or browse for one you already have. In Runtime, point at your llama-server 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. Packaging is not configured.

Where the project stands

Noullama has not had an official release. The source is public under GPL-3.0, but there is no installer, no bundled runtime, and packaging is not configured. Builds currently come from the repository.

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