fix(coding-agent): prioritize provider matches in model selector
closes #5892
This commit is contained in:
@@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed `/model` selector search to rank exact provider-prefixed matches before proxy-provider model ID matches ([#5892](https://github.com/earendil-works/pi/issues/5892)).
|
||||||
|
|
||||||
## [0.79.8] - 2026-06-19
|
## [0.79.8] - 2026-06-19
|
||||||
|
|
||||||
### New Features
|
### New Features
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import {
|
|||||||
} from "@earendil-works/pi-tui";
|
} from "@earendil-works/pi-tui";
|
||||||
import type { ModelRegistry } from "../../../core/model-registry.ts";
|
import type { ModelRegistry } from "../../../core/model-registry.ts";
|
||||||
import type { SettingsManager } from "../../../core/settings-manager.ts";
|
import type { SettingsManager } from "../../../core/settings-manager.ts";
|
||||||
import { getModelSearchText } from "../model-search.ts";
|
import { getModelSelectorSearchText } from "../model-search.ts";
|
||||||
import { theme } from "../theme/theme.ts";
|
import { theme } from "../theme/theme.ts";
|
||||||
import { DynamicBorder } from "./dynamic-border.ts";
|
import { DynamicBorder } from "./dynamic-border.ts";
|
||||||
import { keyHint } from "./keybinding-hints.ts";
|
import { keyHint } from "./keybinding-hints.ts";
|
||||||
@@ -219,7 +219,7 @@ export class ModelSelectorComponent extends Container implements Focusable {
|
|||||||
private filterModels(query: string): void {
|
private filterModels(query: string): void {
|
||||||
this.filteredModels = query
|
this.filteredModels = query
|
||||||
? fuzzyFilter(this.activeModels, query, ({ id, provider, model }) =>
|
? fuzzyFilter(this.activeModels, query, ({ id, provider, model }) =>
|
||||||
getModelSearchText({ id, provider, name: model.name }),
|
getModelSelectorSearchText({ id, provider, name: model.name }),
|
||||||
)
|
)
|
||||||
: this.activeModels;
|
: this.activeModels;
|
||||||
this.selectedIndex = Math.min(this.selectedIndex, Math.max(0, this.filteredModels.length - 1));
|
this.selectedIndex = Math.min(this.selectedIndex, Math.max(0, this.filteredModels.length - 1));
|
||||||
|
|||||||
@@ -9,3 +9,13 @@ export function getModelSearchText(item: ModelSearchItem): string {
|
|||||||
const name = item.name ? ` ${item.name}` : "";
|
const name = item.name ? ` ${item.name}` : "";
|
||||||
return `${id} ${provider} ${provider}/${id} ${provider} ${id}${name}`;
|
return `${id} ${provider} ${provider}/${id} ${provider} ${id}${name}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The /model selector search should rank exact provider-prefixed queries before proxy-provider IDs
|
||||||
|
* like openrouter/openai/gpt-5, so keep the bare model ID out of the leading position.
|
||||||
|
*/
|
||||||
|
export function getModelSelectorSearchText(item: ModelSearchItem): string {
|
||||||
|
const { id, provider } = item;
|
||||||
|
const name = item.name ? ` ${item.name}` : "";
|
||||||
|
return `${provider} ${provider}/${id} ${provider} ${id}${name}`;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user