Local DeepSeek, honestly
The registry chooses the transport. A local model without a healthy local server fails closed instead of leaking to the gateway.
The guide documents the GGUF sizes and llama.cpp requirements; operational status still comes from this machine's own preflight.
By the end, you can
- trace a model ID to its registered adapter
- explain why local never falls back
- distinguish install evidence from completion evidence
The big idea
deepseek-v4-flash means local only. If ALEMBIC_LOCAL_URL is absent or unhealthy, Alembic stops with an actionable error.
Think of a labeled power socket. A local-only plug does not secretly draw power from a paid remote outlet. The analogy breaks because software also health-checks the socket before writing.
In the code
getModelById(modelId)?.adapterId selects local or cliproxyapi. An unregistered explicit model ID fails closed, so a typo cannot guess a transport. The selected adapter is health-checked before transcript or memory writes.
In one picture
In the code
apps/cli/src/commands.ts
const model = getModelById(modelId);
if (!model) return err(new Error("Model is not registered."));
adapterId = model.adapterId;
adapter = registry.get(adapterId);
if (!adapter && adapterId === "local") {
return err(new Error("Local models never fall back to cliproxyapi."));
}How to find or run this
ALEMBIC_LOCAL_URL=http://127.0.0.1:8000 alembic import session.jsonl --format codex --distill --online first health-checks the local endpoint.
Try it
Switch the selected model. The transport changes because the registry entry changes—not because a router guesses.
Registry route explorer
Requires a healthy ALEMBIC_LOCAL_URL. Missing wiring is an error.
Requires the configured gateway and its token.
Flip the three cards, commit a prediction, then take the check.