refactor(model): migrate default to kilo-auto/frontier across codebase

migrate default model IDs from kilo/auto to kilo-auto/frontier and related references across the codebase. update defaults in gateway constants, VSCode provider, tests, UI defaults, and e2e seed. align docs and examples to use kilo-auto/frontier and kilo-auto/free. this is a breaking change for existing configurations

BREAKING CHANGE: update default model IDs to kilo-auto/frontier and kilo-auto/free
kilo/auto and kilo/auto-free no longer used as defaults; update all
references accordingly
This commit is contained in:
kiloconnect[bot]
2026-03-06 15:03:35 +00:00
parent ee4ef4e294
commit 55a1de8d9e
14 changed files with 38 additions and 38 deletions
+1 -1
View File
@@ -35,4 +35,4 @@ jobs:
KILO_ORG_ID: ${{ secrets.KILO_ORG_ID }}
KILO_PERMISSION: '{"bash": "deny"}'
with:
model: kilo/kilo/auto
model: kilo-auto/frontier
+1 -1
View File
@@ -72,7 +72,7 @@ const serverEnv = {
KILO_E2E_PROJECT_DIR: repoDir,
KILO_E2E_SESSION_TITLE: "E2E Session",
KILO_E2E_MESSAGE: "Seeded for UI e2e",
KILO_E2E_MODEL: "kilo/kilo/auto", // kilocode_change
KILO_E2E_MODEL: "kilo-auto/frontier", // kilocode_change
KILO_CLIENT: "app",
} satisfies Record<string, string>
@@ -5,11 +5,11 @@ description: "Smart model routing that automatically selects the optimal AI mode
# Auto Model
Auto Model (`kilo/auto`) is a smart model routing system that automatically selects the optimal AI model based on the Kilo Code mode you're using. It balances cost and capability so you get the best results without manual model switching.
Auto Model (`kilo-auto/frontier`) is a smart model routing system that automatically selects the optimal AI model based on the Kilo Code mode you're using. It balances cost and capability so you get the best results without manual model switching.
## How It Works
1. Select `kilo/auto` as your model in the model dropdown
1. Select `kilo-auto/frontier` as your model in the model dropdown
2. Start working in any mode (Code, Architect, Debug, etc.)
3. The system automatically routes your requests to the best model for that task
@@ -55,18 +55,18 @@ Auto Model always routes to Claude's latest and most capable models:
## Requirements
{% callout type="warning" title="Version Requirements" %}
Auto Model requires **VS Code/JetBrains extension v5.2.3+** or **CLI v1.0.15+** for automatic mode-based switching. On older versions, `kilo/auto` will default to Claude Sonnet for all requests.
Auto Model requires **VS Code/JetBrains extension v5.2.3+** or **CLI v1.0.15+** for automatic mode-based switching. On older versions, `kilo-auto/frontier` will default to Claude Sonnet for all requests.
{% /callout %}
## Getting Started
{% callout type="tip" title="Quick Setup" %}
Select `kilo/auto` from the model dropdown in the Kilo Code chat interface. That's all you need to do.
Select `kilo-auto/frontier` from the model dropdown in the Kilo Code chat interface. That's all you need to do.
{% /callout %}
1. Open Kilo Code in VS Code or JetBrains
2. Click the model selector dropdown
3. Choose `kilo/auto`
3. Choose `kilo-auto/frontier`
4. Start chatting - the right model is selected automatically based on your current mode
## When to Use Auto Model
@@ -7,7 +7,7 @@ description: "Extending Kilo Auto to a family of smart model tiers that match us
## Overview
Today, Kilo Auto (`kilo/auto`) solves a real problem: users shouldn't have to know which AI model is best for planning versus coding. It picks the right model for the task automatically.
Today, Kilo Auto (`kilo-auto/frontier`) solves a real problem: users shouldn't have to know which AI model is best for planning versus coding. It picks the right model for the task automatically.
But it only solves that problem for one audience — users willing to pay for frontier models. Everyone else is left navigating a long, intimidating model list where the "best" free or open-weight option changes monthly. This is a source of friction for new free users and cost-conscious teams.
@@ -41,13 +41,13 @@ Extend Kilo Auto into four tiers.
**What problem it solves**: Professional developers and teams don't want to spend time evaluating which paid model is best for which task — and the answer keeps changing as providers release new versions. Frontier eliminates that research burden. Users get the best paid models automatically, matched to their task, without ever having to compare benchmarks or read release notes.
**What it does**: This is what `kilo/auto` is today. It routes between the best paid models based on the task — stronger reasoning models for planning and architecture, faster models for code generation and editing. It optimizes for the best balance of capability, speed, and token efficiency.
**What it does**: This is what `kilo-auto/frontier` is today. It routes between the best paid models based on the task — stronger reasoning models for planning and architecture, faster models for code generation and editing. It optimizes for the best balance of capability, speed, and token efficiency.
**Why it matters**: Frontier models offer the highest code quality, best instruction following, and most reliable tool use. For professional developers and teams where output quality directly impacts productivity, this is the right choice.
**Pricing**: Paid. Uses credits.
**Backward compatibility**: The existing `kilo/auto` model ID becomes an alias for `kilo/auto-frontier`. No behavior change for existing users.
**Backward compatibility**: The existing `kilo/auto` model ID becomes an alias for `kilo-auto/frontier`. No behavior change for existing users.
### Auto: Free
@@ -121,8 +121,8 @@ The UI shows the tier name (e.g., "Auto: Frontier"), not the underlying model. U
## Requirements
- `kilo/auto` remains as a backward-compatible alias for `kilo/auto-frontier`
- Unauthenticated users default to `kilo/auto-free` with no configuration required
- `kilo/auto` remains as a backward-compatible alias for `kilo-auto/frontier`
- Unauthenticated users default to `kilo-auto/free` with no configuration required
- Free tier must handle model availability changes gracefully — fallback to next-best free model, never surface a "model unavailable" error if any free model exists
- Open tier must use open-weight models as the primary routing targets
- Auto: Small must detect credit availability and select paid or free small models accordingly
@@ -111,11 +111,11 @@ This provides the benefit of Vercel's reliability infrastructure while using you
The gateway accepts the following headers:
| Header | Required | Description |
| --------------------------- | ----------------------- | -------------------------------------------- |
| `Authorization` | Yes (unless free model) | `Bearer <api_key>` |
| `Content-Type` | Yes | `application/json` |
| `X-KiloCode-OrganizationId` | No | Organization context for org-scoped requests |
| `X-KiloCode-TaskId` | No | Task identifier for prompt cache keying |
| `X-KiloCode-Version` | No | Client version string |
| `x-kilocode-mode` | No | Mode hint for `kilo/auto` model routing |
| Header | Required | Description |
| --------------------------- | ----------------------- | ------------------------------------------------ |
| `Authorization` | Yes (unless free model) | `Bearer <api_key>` |
| `Content-Type` | Yes | `application/json` |
| `X-KiloCode-OrganizationId` | No | Organization context for org-scoped requests |
| `X-KiloCode-TaskId` | No | Task identifier for prompt cache keying |
| `X-KiloCode-Version` | No | Client version string |
| `x-kilocode-mode` | No | Mode hint for `kilo-auto/frontier` model routing |
@@ -64,9 +64,9 @@ Several models are available at no cost, subject to rate limits:
Free models are available to both authenticated and anonymous users. Anonymous users are rate-limited to 200 requests per hour per IP address.
## The `kilo/auto` model
## The `kilo-auto/frontier` model
The `kilo/auto` virtual model automatically selects the best model based on the task type. The selection is controlled by the `x-kilocode-mode` request header:
The `kilo-auto/frontier` virtual model automatically selects the best model based on the task type. The selection is controlled by the `x-kilocode-mode` request header:
| Mode | Resolved Model |
| -------------------------------------------------------------- | ----------------------------- |
@@ -76,7 +76,7 @@ The `kilo/auto` virtual model automatically selects the best model based on the
```json
{
"model": "kilo/auto",
"model": "kilo-auto/frontier",
"messages": [{ "role": "user", "content": "Help me design a database schema" }]
}
```
@@ -88,7 +88,7 @@ curl -X POST "https://api.kilo.ai/api/gateway/chat/completions" \
-H "Authorization: Bearer $KILO_API_KEY" \
-H "x-kilocode-mode: plan" \
-H "Content-Type: application/json" \
-d '{"model": "kilo/auto", "messages": [{"role": "user", "content": "Design a database schema"}]}'
-d '{"model": "kilo-auto/frontier", "messages": [{"role": "user", "content": "Design a database schema"}]}'
```
## Providers
+2 -2
View File
@@ -19,10 +19,10 @@ export const KILO_OPENROUTER_BASE = `${KILO_API_BASE}/api/openrouter`
export const POLL_INTERVAL_MS = 3000
/** Default model for authenticated users */
export const DEFAULT_MODEL = "kilo/auto"
export const DEFAULT_MODEL = "kilo-auto/frontier"
/** Default model for anonymous/free usage */
export const DEFAULT_FREE_MODEL = "kilo/auto-free"
export const DEFAULT_FREE_MODEL = "kilo-auto/free"
/** Token expiration duration in milliseconds (1 year) */
export const TOKEN_EXPIRATION_MS = 365 * 24 * 60 * 60 * 1000
+2 -2
View File
@@ -600,12 +600,12 @@
},
"kilo-code.new.model.providerID": {
"type": "string",
"default": "kilo",
"default": "kilo-auto",
"description": "Default model provider ID for new sessions"
},
"kilo-code.new.model.modelID": {
"type": "string",
"default": "kilo/auto",
"default": "kilo-auto/frontier",
"description": "Default model ID for new sessions"
},
"kilo-code.new.autocomplete.enableAutoTrigger": {
+2 -2
View File
@@ -1002,8 +1002,8 @@ export class KiloProvider implements vscode.WebviewViewProvider, TelemetryProper
const normalized = indexProvidersById(response.all)
const config = vscode.workspace.getConfiguration("kilo-code.new.model")
const providerID = config.get<string>("providerID", "kilo")
const modelID = config.get<string>("modelID", "kilo/auto")
const providerID = config.get<string>("providerID", "kilo-auto")
const modelID = config.get<string>("modelID", "kilo-auto/frontier")
const message = {
type: "providersLoaded",
@@ -97,8 +97,8 @@ describe("buildTriggerLabel", () => {
})
it("returns modelID for kilo gateway raw selection", () => {
const raw = { providerID: "kilo", modelID: "kilo/auto" }
expect(buildTriggerLabel(undefined, undefined, raw, false, "", true, labels)).toBe("kilo/auto")
const raw = { providerID: "kilo-auto", modelID: "kilo-auto/frontier" }
expect(buildTriggerLabel(undefined, undefined, raw, false, "", true, labels)).toBe("kilo-auto/frontier")
})
it("returns providerID / modelID for non-kilo raw selection", () => {
@@ -20,7 +20,7 @@ interface ProviderContextValue {
findModel: (selection: ModelSelection | null) => EnrichedModel | undefined
}
const KILO_AUTO: ModelSelection = { providerID: "kilo", modelID: "kilo/auto" }
const KILO_AUTO: ModelSelection = { providerID: "kilo-auto", modelID: "kilo-auto/frontier" }
export const ProviderContext = createContext<ProviderContextValue>()
@@ -238,7 +238,7 @@ export const SessionProvider: ParentComponent = (props) => {
})
// Global model selection per agent/mode
// Precedence: user override > per-mode config > global default > kilo/auto
// Precedence: user override > per-mode config > global default > kilo-auto/frontier
const selected = createMemo<ModelSelection | null>(() => {
const agentName = selectedAgentName()
const override = store.modelSelections[agentName]
@@ -24,7 +24,7 @@ export const ModelSelectorNoProviders: Story = {
<StoryProviders>
<div style={{ display: "flex", "align-items": "center", gap: "8px" }}>
<ModelSelectorBase
value={{ providerID: "kilo", modelID: "kilo/auto" }}
value={{ providerID: "kilo-auto", modelID: "kilo-auto/frontier" }}
onSelect={() => {}}
placement="bottom-start"
/>
+3 -3
View File
@@ -1,10 +1,10 @@
const dir = process.env.KILO_E2E_PROJECT_DIR ?? process.cwd()
const title = process.env.KILO_E2E_SESSION_TITLE ?? "E2E Session"
const text = process.env.KILO_E2E_MESSAGE ?? "Seeded for UI e2e"
const model = process.env.KILO_E2E_MODEL ?? "kilo/kilo/auto"
const model = process.env.KILO_E2E_MODEL ?? "kilo-auto/frontier"
const parts = model.split("/")
const providerID = parts[0] ?? "kilo" // kilocode_change
const modelID = parts.slice(1).join("/") || "kilo/auto" // kilocode_change
const providerID = parts[0] ?? "kilo-auto" // kilocode_change
const modelID = parts.slice(1).join("/") || "kilo-auto/frontier" // kilocode_change
const now = Date.now()
const seed = async () => {