fix(models): store provider custom models by provider scope
This commit is contained in:
@@ -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,
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user