Which base models the Arkor backend accepts today, why the list is short, and where it's headed.
Today Studio's Playground (base-model mode) and Arkor's hosted inference serve exactly one base model, Gemma 4 E4B. The identifier you pass to createTrainer is the fully qualified unsloth/gemma-4-E4B-it — the sole SupportedModel value, as in the example below — checked by the compiler and re-checked when the trainer is constructed. The training backend can accept identifiers this SDK has not listed yet. Reaching one means bypassing createTrainer and submitting the job through the raw cloud API client, whose createJob keeps config.model a plain string — an escape hatch these docs do not otherwise cover, and the same one the "Unsupported model" error points at. Below: what that value gets you and what's next.
gemma-4-E4B-it is the Gemma 4 instruction-tuned build, packaged by Unsloth for fast LoRA / QLoRA fine-tuning. Every starter template (triage, translate, redaction) targets it by default.
import { createTrainer } from "arkor";
export const trainer = createTrainer({
name: "support-bot-v1",
model: "unsloth/gemma-4-E4B-it",
dataset: { type: "huggingface", name: "arkorlab/triage-demo" },
});model is typed as SupportedModel, a union derived from the supported list rather than a plain string. A typo does not compile:
createTrainer({
name: "support-bot-v1",
// Type '"unsloth/gema-4-E4B-it"' is not assignable to type 'SupportedModel'.
model: "unsloth/gema-4-E4B-it",
dataset: { type: "huggingface", name: "arkorlab/triage-demo" },
});The same list is enforced when the trainer is constructed: createTrainer throws on a model outside it. Flows that never run a typechecker (plain JavaScript, or arkor build / arkor start, which bundle with esbuild) fail fast locally instead of surfacing a 4xx from the backend.
Both the type and the list itself are exported, so you can iterate the list at run time (to render a picker, for example):
import { SUPPORTED_MODELS, type SupportedModel } from "arkor";Note that this narrowing applies to what you send. A job read back from the backend (TrainingJob.config.model) stays a string, because the backend can run a model your installed version of the SDK predates.
Open the model field to the full Gemma 4 family so you can pick the variant that matches your use case (size, capability, latency, quality).
Expanding to additional open-weight families is on the Roadmap backlog.
model field is and where it sits among the other fields.createTrainer reference for the full TrainerInput type.License
This page is licensed under the MIT License. Keep its copyright and permission notice in all copies.
Copyright (c) 2026 Arkor