|
|
|
@ -15,6 +15,39 @@ function hasValue(value: unknown): boolean { |
|
|
|
return value !== undefined && value !== null && value !== ""; |
|
|
|
} |
|
|
|
|
|
|
|
function selectedModelIdentifiers(model: SelectedModel | undefined): Set<string> { |
|
|
|
const identifiers = new Set<string>(); |
|
|
|
if (!model) return identifiers; |
|
|
|
|
|
|
|
for (const value of [ |
|
|
|
model.modelId, |
|
|
|
model.displayName, |
|
|
|
model.metadata?.aiModelId, |
|
|
|
model.metadata?.aiModelCode, |
|
|
|
model.metadata?.aiModelCodeAlias, |
|
|
|
]) { |
|
|
|
if (hasValue(value)) { |
|
|
|
identifiers.add(String(value)); |
|
|
|
} |
|
|
|
} |
|
|
|
return identifiers; |
|
|
|
} |
|
|
|
|
|
|
|
function providerModelMatchesSelectedModel(model: ProviderModel, selected: SelectedModel | undefined): boolean { |
|
|
|
if (!selected || model.provider !== selected.provider) return false; |
|
|
|
|
|
|
|
const identifiers = selectedModelIdentifiers(selected); |
|
|
|
if (identifiers.size === 0) return false; |
|
|
|
|
|
|
|
return [ |
|
|
|
model.id, |
|
|
|
model.name, |
|
|
|
model.metadata?.aiModelId, |
|
|
|
model.metadata?.aiModelCode, |
|
|
|
model.metadata?.aiModelCodeAlias, |
|
|
|
].some((value) => hasValue(value) && identifiers.has(String(value))); |
|
|
|
} |
|
|
|
|
|
|
|
export function shouldUpdateSelectedModelFromProviderModel( |
|
|
|
current: SelectedModel | undefined, |
|
|
|
model: ProviderModel |
|
|
|
@ -34,7 +67,7 @@ export function chooseModelFromList( |
|
|
|
models: ProviderModel[], |
|
|
|
preferred?: SelectedModel |
|
|
|
): SelectedModel | null { |
|
|
|
const model = models.find((item) => item.id === preferred?.modelId) |
|
|
|
const model = models.find((item) => providerModelMatchesSelectedModel(item, preferred)) |
|
|
|
?? models.find((item) => item.metadata?.isDefault === 1) |
|
|
|
?? models[0]; |
|
|
|
return model ? toSelectedModel(model) : null; |
|
|
|
|