2026-04-17 14:41:08 +09:00
|
|
|
import type { DelegatedModelConfig } from "./types"
|
|
|
|
|
|
|
|
|
|
export interface MetadataModel {
|
|
|
|
|
providerID: string
|
|
|
|
|
modelID: string
|
2026-04-20 14:51:01 +09:00
|
|
|
variant?: string
|
2026-04-17 14:41:08 +09:00
|
|
|
}
|
|
|
|
|
|
2026-04-20 14:51:01 +09:00
|
|
|
type ModelLike = Pick<DelegatedModelConfig, "providerID" | "modelID" | "variant"> | MetadataModel
|
|
|
|
|
|
|
|
|
|
function isModelLike(value: unknown): value is ModelLike {
|
|
|
|
|
return typeof value === "object"
|
|
|
|
|
&& value !== null
|
|
|
|
|
&& "providerID" in value
|
|
|
|
|
&& typeof value.providerID === "string"
|
|
|
|
|
&& "modelID" in value
|
|
|
|
|
&& typeof value.modelID === "string"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function toMetadataModel(model: ModelLike): MetadataModel {
|
|
|
|
|
return {
|
|
|
|
|
providerID: model.providerID,
|
|
|
|
|
modelID: model.modelID,
|
|
|
|
|
...("variant" in model && model.variant ? { variant: model.variant } : {}),
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-04-17 14:41:08 +09:00
|
|
|
|
|
|
|
|
export function resolveMetadataModel(
|
|
|
|
|
primary: ModelLike | undefined,
|
|
|
|
|
fallback: ModelLike | undefined,
|
|
|
|
|
): MetadataModel | undefined {
|
2026-04-20 14:51:01 +09:00
|
|
|
if (isModelLike(primary)) {
|
|
|
|
|
return toMetadataModel(primary)
|
2026-04-17 14:41:08 +09:00
|
|
|
}
|
2026-04-20 14:51:01 +09:00
|
|
|
if (isModelLike(fallback)) {
|
|
|
|
|
return toMetadataModel(fallback)
|
2026-04-17 14:41:08 +09:00
|
|
|
}
|
|
|
|
|
return undefined
|
|
|
|
|
}
|