Skip to content

Commit fb18b06

Browse files
all fixed?
1 parent 6cc093f commit fb18b06

3 files changed

Lines changed: 39 additions & 9 deletions

File tree

src/semantic/summariser.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ import * as vscode from 'vscode';
88
import type { Result } from '../models/TaskItem';
99
import { ok, err } from '../models/TaskItem';
1010
import { logger } from '../utils/logger';
11-
import { resolveModel, pickConcreteModel } from './modelSelection';
11+
import { resolveModel } from './modelSelection';
1212
import type { ModelSelectionDeps, ModelRef } from './modelSelection';
1313
export type { ModelRef, ModelSelectionDeps } from './modelSelection';
14-
export { resolveModel, pickConcreteModel, AUTO_MODEL_ID } from './modelSelection';
14+
export { resolveModel, AUTO_MODEL_ID } from './modelSelection';
1515

1616
const MAX_CONTENT_LENGTH = 4000;
1717
const MODEL_RETRY_COUNT = 10;
@@ -121,7 +121,7 @@ function buildVSCodeDeps(): ModelSelectionDeps {
121121

122122
/**
123123
* Selects the configured model by ID, or prompts the user to pick one.
124-
* When "auto" is selected, resolves to the first concrete (non-auto) model.
124+
* When "auto" is selected, uses the Copilot auto model directly.
125125
*/
126126
export async function selectCopilotModel(): Promise<Result<vscode.LanguageModelChat, string>> {
127127
const result = await resolveModel(buildVSCodeDeps());
@@ -130,11 +130,7 @@ export async function selectCopilotModel(): Promise<Result<vscode.LanguageModelC
130130
const allModels = await fetchModels({ vendor: 'copilot' });
131131
if (allModels.length === 0) { return err('No Copilot models available'); }
132132

133-
const refs = allModels.map(m => ({ id: m.id, name: m.name }));
134-
const concrete = pickConcreteModel({ models: refs, preferredId: result.value.id });
135-
if (!concrete) { return err('Selected model no longer available'); }
136-
137-
const model = allModels.find(m => m.id === concrete.id);
133+
const model = allModels.find(m => m.id === result.value.id);
138134
if (!model) { return err('Selected model no longer available'); }
139135

140136
logger.info('Resolved model for requests', { selected: result.value.id, resolved: model.id });

src/test/unit/model-selection.unit.test.ts

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ suite('Model Selection (resolveModel)', () => {
139139
});
140140
});
141141

142-
suite('pickConcreteModel (auto resolution)', () => {
142+
suite('pickConcreteModel (legacy — no longer used in main flow)', () => {
143143

144144
test('returns specific model when preferredId is not auto', () => {
145145
const result = pickConcreteModel({ models: ALL_MODELS, preferredId: HAIKU.id });
@@ -176,3 +176,37 @@ suite('pickConcreteModel (auto resolution)', () => {
176176
assert.strictEqual(result.id, OPUS.id, 'Should pick first model when no auto in list');
177177
});
178178
});
179+
180+
suite('Direct model lookup (selectCopilotModel fix)', () => {
181+
182+
test('auto resolved ID selects auto model — NOT premium', () => {
183+
const models = ALL_WITH_AUTO;
184+
const resolvedId = AUTO_MODEL_ID;
185+
186+
const selected = models.find(m => m.id === resolvedId);
187+
188+
assert.ok(selected, 'Auto model must exist in list');
189+
assert.strictEqual(selected.id, AUTO_MODEL_ID, 'Must use auto model directly');
190+
assert.notStrictEqual(selected.id, OPUS.id, 'Must NOT resolve to premium opus model');
191+
});
192+
193+
test('specific model ID selects that exact model', () => {
194+
const models = ALL_WITH_AUTO;
195+
const resolvedId = HAIKU.id;
196+
197+
const selected = models.find(m => m.id === resolvedId);
198+
199+
assert.ok(selected, 'Haiku model must be found');
200+
assert.strictEqual(selected.id, HAIKU.id);
201+
assert.strictEqual(selected.name, HAIKU.name);
202+
});
203+
204+
test('nonexistent model ID returns undefined', () => {
205+
const models = ALL_WITH_AUTO;
206+
const resolvedId = 'nonexistent';
207+
208+
const selected = models.find(m => m.id === resolvedId);
209+
210+
assert.strictEqual(selected, undefined, 'Nonexistent model must not match');
211+
});
212+
});
108 KB
Loading

0 commit comments

Comments
 (0)