fix(models): store provider custom models by provider scope

This commit is contained in:
nguyenha935
2026-06-20 02:44:17 +07:00
committed by decolua
parent 8efacc1147
commit 707a91555d
6 changed files with 282 additions and 118 deletions

View File

@@ -181,26 +181,41 @@ export default function ModelSelectModal({
name: aliasName,
value: fullModel,
}));
const customRegisteredModels = customModels
.filter((m) => m.providerAlias === alias)
.map((m) => ({
id: m.id,
name: m.name || m.id,
value: `${alias}/${m.id}`,
kind: getModelKind(m),
isCustom: true,
}));
// For typed kinds, only include hardcoded typed models (aliases are typically LLM-only and lack type info)
let combined = aliasModels;
if (kindFilter && TYPED_KINDS.has(kindFilter)) {
combined = getModelsByProviderId(providerId)
const registeredTyped = customRegisteredModels.filter((m) => getModelKind(m) === kindFilter);
combined = [
...registeredTyped,
...getModelsByProviderId(providerId)
.filter((m) => getModelKind(m) === kindFilter)
.map((m) => ({ id: m.id, name: m.name, value: `${alias}/${m.id}`, kind: getModelKind(m) }));
.map((m) => ({ id: m.id, name: m.name, value: `${alias}/${m.id}`, kind: getModelKind(m) }))
.filter((m) => !registeredTyped.some((registered) => registered.value === m.value)),
];
// Fallback: provider-as-model when no hardcoded models match (tts/image/webFetch only)
if (combined.length === 0 && ALLOW_PROVIDER_FALLBACK_KINDS.has(kindFilter)) {
const supports = (providerInfo.serviceKinds || ["llm"]).includes(kindFilter);
if (supports) combined = [{ id: providerId, name: providerInfo.name, value: alias }];
}
} else {
// LLM/null kind: merge hardcoded models (e.g. mimo-free → mimo-auto) with aliases
const seen = new Set(aliasModels.map((m) => m.value));
// LLM/null kind: merge hardcoded models (e.g. mimo-free → mimo-auto) with user-added models
const registeredLlms = customRegisteredModels.filter((m) => !getModelKind(m) || getModelKind(m) === "llm");
const seen = new Set([...aliasModels, ...registeredLlms].map((m) => m.value));
const hardcoded = getModelsByProviderId(providerId)
.filter((m) => !getModelKind(m) || getModelKind(m) === "llm")
.map((m) => ({ id: m.id, name: m.name, value: `${alias}/${m.id}`, kind: getModelKind(m) }))
.filter((m) => !seen.has(m.value));
combined = [...aliasModels, ...hardcoded];
combined = [...registeredLlms, ...aliasModels.filter((m) => !registeredLlms.some((registered) => registered.value === m.value)), ...hardcoded];
}
if (combined.length > 0) {
@@ -551,4 +566,3 @@ ModelSelectModal.propTypes = {
addedModelValues: PropTypes.arrayOf(PropTypes.string),
closeOnSelect: PropTypes.bool,
};