import {
createProviderModelMapperFromFile,
loadProviderModelsDataFromFile,
type ModelInfo,
} from '../../../../sites/playground/server/src/provider-models-mapper';
import { resolveMaasModelsJsonPath } from './maas-manifest-models';
type BenchProviderMapper = Awaited<ReturnType<typeof createProviderModelMapperFromFile>>;
let benchMapperInit: Promise<{ mapper: BenchProviderMapper; data: Record<string, any> | null }> | null = null;
async function getBenchMapperAndData() {
if (!benchMapperInit) {
const providerModelsPath = resolveMaasModelsJsonPath();
benchMapperInit = Promise.all([
loadProviderModelsDataFromFile(providerModelsPath),
createProviderModelMapperFromFile(providerModelsPath),
])
.then(([data, mapper]) => ({ data, mapper }))
.catch((err) => {
benchMapperInit = null;
throw err;
});
}
return benchMapperInit;
}
function resolveModelInfoById(providerModelsData: Record<string, any> | null, modelId: string): ModelInfo | undefined {
if (!providerModelsData) return undefined;
for (const providerData of Object.values(providerModelsData)) {
const models = Array.isArray((providerData as any)?.models) ? (providerData as any).models : [];
const matched = models.find((model: any) => model?.id === modelId);
if (matched?.name) {
const providerInfo = { ...(providerData as any) };
delete providerInfo.models;
return {
model: { ...matched },
provider: { ...providerInfo },
};
}
}
return undefined;
}
* 与 playground chat-genui 对齐:通过 ProviderModelMapper 解析模型并生成 AI SDK 模型实例。
* @param modelName 业务配置中的模型名称(例如 DeepSeek-V3.2)
*/
export async function resolveAiSdkModelForBench(modelName: string) {
const { mapper, data: providerModelsData } = await getBenchMapperAndData();
const modelInfoByName = mapper.getModelInfo(modelName);
const modelInfo = modelInfoByName ?? resolveModelInfoById(providerModelsData, modelName);
if (!modelInfo) {
throw new Error(`Model not found in maas-models.json: ${modelName}`);
}
return mapper.getAiSDKModel(modelInfo);
}