Models

Any model. One harness.

Bring your own keys, run a model on your own machine, or use the Dulus-hosted lineup on Fuel. Switch with /model mid-conversation — and one reasoning dial works for all of them.

Illustration: the /model picker. Typing filters one list of Dulus-hosted models, models on your own keys and local models, and Enter switches the conversation to the highlighted one.

Dulus-hosted

Twelve models. One meter.

Hosted models are paid per token in Fuel, at a relative rate: a 2× model costs twice as much Fuel per token as a 1× model. Cached tokens are free, a failed call is refunded in full, and every response carries its exact charge in X-Dulus-Fuel-Charged.

Dulus-hosted models, their relative Fuel rate and what each one is good for
Model Fuel rate Good for
dulus-a-9b 1× Fast & cheap
dulus-mistral-7b 1× Fast & cheap
dulus-mistral-nemo 1× Fast & cheap
dulus-gpt-oss-20b 1× Open-weights generalist
dulus-b-27b 2× Balanced
dulus-mistral-small-24b 2× Balanced
dulus-qwen-32b 2× Balanced
dulus-coder-30b 2× Coding
dulus-llama-70b 3× Large generalist
dulus-vl-72b 3× Vision
dulus-gpt-oss-120b 3× Open-weights generalist
dulus-x-397b 4× The big one
dulus-free-9b 0× Holder free tier
dulus-free-7b 0× Holder free tier
dulus-free-20b 0× Holder free tier

Holder free tier

Keep at least 1,000,000 $DULUS as Fuel in your Dulus balance and get 40 free messages every 24 hours on dulus-free-9b, dulus-free-7b and dulus-free-20b, up to 2,048 output tokens each. The balance is held, never spent — and it has to be deposited Fuel, not tokens sitting in your own wallet.

How Fuel works

Bring your own keys

Your keys. Zero Fuel.

Add a provider key and pick a model with /model provider/model. Models on your own keys cost nothing from Dulus — you pay your provider directly. Provider keys in your config are encrypted at rest.

Model makers 12

  • Anthropicanthropic/…
  • OpenAIopenai/…
  • Google Geminigemini/…
  • DeepSeekdeepseek/…
  • Moonshot Kimikimi/…
  • Alibaba Qwenqwen/…modelstudio/…
  • Z.ai GLMzhipu/…
  • Perplexityperplexity/…
  • MiniMaxminimax/…
  • Xiaomixiaomi/…
  • Sakanasakana/…
  • Metameta/…

Clouds & gateways 6

  • Vertex AIYour gcloud login, no keygcloud/…
  • Azure OpenAIBy deployment nameazure/…
  • Amazon Bedrockbedrock/…
  • Cloudflare Workers AI@cf/…
  • NVIDIA NIMYour API key
  • AMDYour vLLM serveramd/…

Local

Your hardware. Same agent.

Point /model at a runtime on your own machine and Dulus drives it like any other model. Local models cost nothing from Dulus.

32k

A window your RAM can hold

Local servers reserve memory for the whole context window up front, so Dulus starts Ollama and LM Studio at a 32k window instead of the biggest one a model advertises. Raise it with /tokens context_limit when your machine can hold more.

  • Ollama

    localhost:11434

    Pull a model with Ollama, then switch to it.

    /model ollama/qwen2.5-coder
  • LM Studio

    localhost:1234

    Load a model and start LM Studio’s local server, then pick it.

    /model lmstudio/…
  • llama.cpp & friends

    OpenAI-compatible

    llama.cpp’s server, or any other server on your machine that speaks the OpenAI API.

    llama-server -m model.gguf

Reasoning

One dial. Every model.

/thinking 0–4 sets how hard the model thinks before it answers. Dulus translates the level into whatever each provider understands, so you learn one dial instead of a dozen.

Try a thinking level

[my-app] » /thinking 0

Thinking OFF ──────────────────────────── 0%

Extended thinking: OFF (level=0)

[my-app] » /thinking 1

Thinking MIN ━━━━━━━───────────────────── 25%

Extended thinking: MIN (level=1)

[my-app] » /thinking 2

Thinking MED ━━━━━━━━━━━━━━────────────── 50%

Extended thinking: MED (level=2)

[my-app] » /thinking 3

Thinking HIGH ━━━━━━━━━━━━━━━━━━━━━─────── 75%

Extended thinking: HIGH (level=3)

[my-app] » /thinking 4

Thinking MAX ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100%

Extended thinking: MAX (level=4)

[my-app] » /thinking debug

Thinking matrix for dulus-b-27b:

▶ 0 OFF → off

▶ 1 MIN → low

▶ 2 MED → medium

▶ 3 HIGH → high

▶ 4 MAX → max

One level, translated

  • Budget-style models

    get a thinking budget that grows with the level.

  • Effort-style models

    get the matching effort setting.

  • Switch-style models

    turn reasoning on or off.

If a model tops out below the level you asked for, Dulus clamps it and tells you. /thinking debug prints the whole 0–4 ladder for the model you are on.

Mesa Redonda

Many models. One table.

Seat 2 to 26 agents in one conversation, each a full agent with its own model, history and mailbox. They talk to each other mid-turn, and Dulus chairs — it never takes a seat.

From code

Same lineup. Your code.

The hosted models speak the OpenAI API. Mint a dulus_sk_live_… key in the desktop app, point any OpenAI-compatible client at the base URL, and keep the code you have.

Base URL https://control.dulus.ai/v1
  • POST /chat/completions GET /models
  • Authorization: Bearer dulus_sk_live_… Your key, shown once.
  • X-Dulus-Fuel-Charged The exact charge, on every response.
  • 402 Out of Fuel. The balance never goes negative.

Read the developer docs

quickstart.py
from openai import OpenAI

client = OpenAI(
    base_url="https://control.dulus.ai/v1",
    api_key="dulus_sk_live_…",
)

reply = client.chat.completions.create(
    model="dulus-b-27b",
    messages=[{"role": "user", "content": "Hola, Dulus"}],
)
print(reply.choices[0].message.content)
Three lines change. The rest is the code you already have.

Pick a model. Then pick another.

The Dulus app is free. Bring your keys, run a local model, or fuel the hosted lineup — and switch whenever the work changes.

esc

Actions