Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/hide-off-always-on-effort.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@moonshot-ai/kimi-code": patch
---

Hide the unsupported Off option in the /model thinking switcher for always-on models that already expose multiple effort levels.
6 changes: 0 additions & 6 deletions apps/kimi-code/src/tui/components/dialogs/model-selector.ts
Original file line number Diff line number Diff line change
Expand Up @@ -374,12 +374,6 @@ export class ModelSelectorComponent extends Container implements Focusable {
const segments = segmentsFor(choice.model);
const active = this.effectiveEffort(choice);
const rendered = segments.map((effort) => segment(effortLabel(effort), effort === active));
// Always-on models (including effort-capable ones) additionally surface an
// unsupported Off so it's explicit that thinking cannot be disabled — same
// shape as the legacy always-on control.
if (availability === 'always-on') {
rendered.push(unavailable('Off'));
}
return ` ${rendered.join(' ')}`;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@ describe('ModelSelectorComponent', () => {
expect(onSelect).toHaveBeenLastCalledWith({ alias: 'kimi', thinking: 'off' });
});

it('always-on effort models show an unsupported Off that cannot be selected', () => {
it('always-on effort models hide Off and clamp selection at the last effort', () => {
const onSelect = vi.fn();
const picker = new ModelSelectorComponent({
models: {
Expand All @@ -376,8 +376,8 @@ describe('ModelSelectorComponent', () => {
});

const raw = picker.render(120).join('\n');
// Off is rendered muted as unavailable, not as a selectable segment.
expect(raw).toContain(currentTheme.fg('textMuted', ' Off (Unsupported) '));
// Off is not surfaced at all — the selectable segments are effort-only.
expect(raw).not.toContain('Off (Unsupported)');
// The active effort is still highlighted.
expect(strip(raw)).toContain('[ High ]');

Expand Down
Loading