28 lines
1.1 KiB
TypeScript
28 lines
1.1 KiB
TypeScript
|
|
import { findMostSpecificFallbackEntry } from "../../shared/fallback-chain-from-models"
|
||
|
|
import type { FallbackEntry } from "../../shared/model-requirements"
|
||
|
|
import type { DelegatedModelConfig } from "./types"
|
||
|
|
|
||
|
|
export function resolveEffectiveFallbackEntry(input: {
|
||
|
|
categoryModel: DelegatedModelConfig | undefined
|
||
|
|
configuredFallbackChain: FallbackEntry[] | undefined
|
||
|
|
resolution:
|
||
|
|
| { skipped: true }
|
||
|
|
| { fallbackEntry?: FallbackEntry; matchedFallback?: boolean }
|
||
|
|
| undefined
|
||
|
|
}): FallbackEntry | undefined {
|
||
|
|
const { categoryModel, configuredFallbackChain, resolution } = input
|
||
|
|
|
||
|
|
const resolutionSkipped = resolution && "skipped" in resolution
|
||
|
|
const resolvedFallbackEntry = resolution && !resolutionSkipped ? resolution.fallbackEntry : undefined
|
||
|
|
const matchedFallback = resolution && !resolutionSkipped ? resolution.matchedFallback === true : false
|
||
|
|
|
||
|
|
if (!matchedFallback || !categoryModel) {
|
||
|
|
return undefined
|
||
|
|
}
|
||
|
|
|
||
|
|
return resolvedFallbackEntry
|
||
|
|
?? (configuredFallbackChain
|
||
|
|
? findMostSpecificFallbackEntry(categoryModel.providerID, categoryModel.modelID, configuredFallbackChain)
|
||
|
|
: undefined)
|
||
|
|
}
|