#!/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());