blueclaw

Language models

The language model configuration says where each effort tier reaches a model; blueclaw decides nothing about which model that is.

There are six tiers, xlow, low, medium, high, xhigh and max, and maximumModelTier and minimumModelTier bound where the runtime may move a task. Two shapes exist, and a configuration that names both is refused (internal/llm/provider_factory.go):

  • tiers maps each tier to an ordered list of endpoints. Each entry has endpoint, model, and optionally one key source, apiKeyEnvironment (the name of an environment variable) or apiKeyPath (a file), then reasoningEffort, providerOrder and providerSort. The Authorization header is sent only when a key source is named. Entries are tried in order, so a deployment writes its own fallbacks. A tier with no entry is an error.
  • capability names a model per tier (xlowModelmaxModel), a decisionModel for intake, and an executionMode, and hands model choice, local runtimes and fallback to the capability service. No key appears in the file.

embedding and decision are single entries of the same shape. Each is reached at its endpoint when it names one, and through the capability service otherwise. decision speaks the decisions API that Jev and Kev serve.

Any string in the runtime file may contain $\{NAME}, filled in from the environment at load time; an unset or empty variable is refused by name. A $ without braces is left as written.

Every structured call leaves as a single function tool with tool_choice forcing it, and the runtime reads the call's arguments; it never sends response_format. Some local servers treat a forced choice as a hint, so a small model may answer in prose and fail the turn.