001project_wildgrowth/backend/scripts/stats-lite-duration.js

55 lines
1.6 KiB
JavaScript
Raw Permalink Normal View History

2026-02-11 15:26:03 +08:00
#!/usr/bin/env node
/**
* 最近用 doubao lite 模型跑出来的已完成课程平均生成时间90 分位
* 用法node scripts/stats-lite-duration.js
*/
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
async function main() {
const tasks = await prisma.courseGenerationTask.findMany({
where: {
status: 'completed',
modelId: { contains: 'lite' },
},
orderBy: { createdAt: 'desc' },
take: 50,
select: { id: true, courseId: true, modelId: true, createdAt: true, updatedAt: true },
});
if (tasks.length === 0) {
console.log('没有用 doubao lite 完成的课程');
return;
}
const durations = tasks
.map((t) => (t.updatedAt && t.createdAt ? (new Date(t.updatedAt) - new Date(t.createdAt)) / 1000 : null))
.filter((d) => d != null);
if (durations.length === 0) {
console.log('无有效时长数据');
return;
}
const sorted = [...durations].sort((a, b) => a - b);
const sum = sorted.reduce((a, b) => a + b, 0);
const avg = sum / sorted.length;
const idx90 = Math.min(Math.ceil(0.9 * sorted.length) - 1, sorted.length - 1);
const p90 = sorted[idx90];
console.log('=== doubao lite 模型:最近已完成课程生成时间 ===\n');
console.log('条数:', sorted.length);
console.log('平均(秒):', Math.round(avg * 10) / 10);
console.log('90分位(秒):', Math.round(p90 * 10) / 10);
console.log('\n明细(秒):', sorted.map((d) => Math.round(d)).join(', '));
}
main()
.then(() => process.exit(0))
.catch((e) => {
console.error(e);
process.exit(1);
})
.finally(() => prisma.$disconnect());