feat(coding-agent/config): added model preference matching system for intelligent model selection

- Added model preference matching system with ModelMatchPreferences and ModelPreferenceContext interfaces to enable intelligent model selection based on usage history and provider preferences.
- Implemented buildPreferenceContext and pickPreferredModel functions to rank and select models based on usage order, provider history, and deprioritization settings.
- Enhanced parseModelPattern function to accept optional ModelMatchPreferences parameter, enabling model resolution to consider user preferences and usage history.
- Updated model matching logic to prioritize models based on historical usage patterns and provider preferences when multiple candidates match a pattern.
This commit is contained in:
can1357
2026-01-28 14:15:48 +01:00
parent b260dbb635
commit bcdcccf100
6 changed files with 204 additions and 29 deletions
+6 -1
View File
@@ -134,6 +134,7 @@ function resolveModelOverride(
settingsManager?: SettingsManager,
): { model?: Model<Api>; thinkingLevel?: ThinkingLevel } {
if (modelPatterns.length === 0) return {};
const matchPreferences = { usageOrder: settingsManager?.getStorage()?.getModelUsageOrder() };
const roles = settingsManager?.serialize().modelRoles as Record<string, string> | undefined;
for (const pattern of modelPatterns) {
const normalized = pattern.trim().toLowerCase();
@@ -148,7 +149,11 @@ function resolveModelOverride(
effectivePattern = configured;
}
}
const { model, thinkingLevel } = parseModelPattern(effectivePattern, modelRegistry.getAvailable());
const { model, thinkingLevel } = parseModelPattern(
effectivePattern,
modelRegistry.getAvailable(),
matchPreferences,
);
if (model) {
return { model, thinkingLevel: thinkingLevel !== "off" ? thinkingLevel : undefined };
}