feat(coding-agent): added provider-priority model selection and refined fallback ordering

- Added first-party-first provider priority defaults for model ranking.
- Consolidated model resolution to use getModelMatchPreferences from session settings.
- Prioritized providerPriorityRank ahead of usage rank when picking preferred models.
- Added second-pass fallback to default-model or API-key-valid matching order.
This commit is contained in:
can1357
2026-06-08 01:32:39 +02:00
parent e1840cde00
commit caa9c69309
17 changed files with 209 additions and 68 deletions
@@ -3,6 +3,7 @@ import type { Api, ApiKey, Model } from "@oh-my-pi/pi-ai";
import type { ApiKeyResolverRegistry } from "../config/api-key-resolver";
import { MODEL_ROLE_IDS } from "../config/model-registry";
import {
getModelMatchPreferences,
type ModelLookupRegistry,
parseModelPattern,
resolveModelRoleValue,
@@ -33,7 +34,7 @@ export async function resolvePrimaryModel(
modelRegistry: CommitModelRegistry,
): Promise<ResolvedCommitModel> {
const available = modelRegistry.getAvailable();
const matchPreferences = { usageOrder: settings.getStorage()?.getModelUsageOrder() };
const matchPreferences = getModelMatchPreferences(settings);
const resolved = override
? resolveModelRoleValue(override, available, { settings, matchPreferences, modelRegistry })
: resolveRoleSelection(["commit", "smol", ...MODEL_ROLE_IDS], settings, available, modelRegistry);
@@ -73,7 +74,7 @@ export async function resolveSmolModel(
}
}
const matchPreferences = { usageOrder: settings.getStorage()?.getModelUsageOrder() };
const matchPreferences = getModelMatchPreferences(settings);
for (const pattern of MODEL_PRIO.smol) {
const candidate = parseModelPattern(pattern, available, matchPreferences, { modelRegistry }).model;
if (!candidate) continue;