Local
Point Stella at any OpenAI-compatible server — Ollama, vLLM, LM Studio, llama.cpp — with no API key, no auto-detection, and zero token cost.
The local pseudo-provider points Stella at any OpenAI-compatible endpoint you run
yourself — Ollama, vLLM, LM Studio, or a llama.cpp server. No API key, no cloud, no
per-token bill; your tokens never leave the machine. It is never auto-detected: local
inference is always an explicit choice.
Setup
There is nothing to export — no key is required. A bearer token is always sent
regardless, because OpenAI-compatible clients must send something: the placeholder
local when LOCAL_API_KEY is unset, your token when it is set. Servers that ignore
auth (the common case) never notice; servers that enforce it just need LOCAL_API_KEY
exported. What is required is the endpoint:
--base-url (or its env form STELLA_BASE_URL) must accompany --model local/…,
every time.
stella --model local/llama3.3 --base-url http://localhost:11434/v1 chatThat is the Ollama default port; vLLM conventionally serves on :8000/v1, LM Studio on
:1234/v1, llama.cpp's server on whatever you gave --port — any of them work, as long
as the endpoint speaks the OpenAI-compatible dialect. The model slug after local/ must
be a model the server actually has loaded (for Ollama, a pulled model name).
export STELLA_BASE_URL=http://localhost:11434/v1
stella --model local/llama3.3 chat # no --base-url needed nowSkip the retyping: a custom provider id
The id local is reserved — it cannot be redefined in settings.json, which is why
--base-url is always required with it. To bake the endpoint into config instead, define
your own provider under a non-reserved id with a base_url; the dialect defaults to
openai-compatible, so one field is usually enough:
{
"providers": {
"ollama": {
"base_url": "http://localhost:11434/v1"
}
}
}stella --model ollama/llama3.3 chatSee settings.json for the full providers schema —
custom providers get the same treatment as built-ins, including a default_model. Two
more knobs worth knowing:
- Credentials. A config-defined provider reads its key from a derived env var:
the id uppercased, with anything outside
[A-Za-z0-9]folded to_, plus_API_KEY—my-gatewayreadsMY_GATEWAY_API_KEY, theollamaentry above readsOLLAMA_API_KEY. Setapi_key_envon the entry to name a different var. - Dialect.
dialectmay beopenai-compatible(the default),openai-responses,anthropic, orgemini— so a custom id can front an Anthropic-shaped or Gemini-shaped gateway too.vertexandbedrockare rejected for custom ids: those dialects need credential resolution (project/region addressing, SigV4 signing) that a settings entry cannot express.
In the pipeline
Local models carry zero dollar cost, which rewrites the role calculus: triage on a
local model is free classification, and a local worker is unlimited iteration on tasks it
can handle. Quality depends entirely on the model you serve — a 70B coder is a credible
budget worker; a 7B model is a triage-and-drafts tool. Judge duty is where local models
most often fall short; keep a frontier judge from the
Model guide over any local worker. Mix local and cloud per
agent with agent_engine_config, and see
Examples for hybrid profiles.
Pricing
Catalog prices do not apply — there are none. Runs on local/… record $0 in the
Observatory; your costs are hardware and electricity. Token
and latency telemetry are still recorded in full, so you can compare a local model's
resolve rate head-to-head against paid ones.
OpenRouter
One key, every vendor — vendor/model slugs pass through the gateway verbatim, per-call cost comes from the gateway's own usage accounting, and any agent can route through it independently.
Configuration
How Stella is configured — settings.json, credentials, workspace files, and the scope hierarchy.