From c82e4fc3a19d16d096443d11c238393deda06d52 Mon Sep 17 00:00:00 2001 From: RaymondVerhoef Date: Wed, 20 May 2026 19:12:16 +0200 Subject: [PATCH] feat: reduce initial question batch size for a topic to 5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a topic's quiz bank is empty (or below the requested count), we previously seeded it with a fresh batch of 10 questions. That meant the first weekly quiz for any new topic triggered a 10-question LLM call — heavy for what's ultimately a 1-question sample for review topics, and overkill for the typical 5-question primary topic. - forceGenerateTopicQuestions default count: 10 → 5 - getOrGenerateTopicQuestions seed amount: 10 → 5 - TestManager "Generate" defaults + empty-state button copy: 10 → 5 - QUIZ_SYSTEM difficulty hint: rewritten for a 5-question batch (2 easy / 2 medium / 1 hard) with explicit "scale proportionally for larger batches" so admins can still generate 10+ via TestManager when they want more depth. Tests 61/61 pass, lint clean (0 errors), build clean. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/components/admin/TestManager.jsx | 6 +++--- src/lib/testService.js | 8 +++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/components/admin/TestManager.jsx b/src/components/admin/TestManager.jsx index b6ba18b..d4619ee 100644 --- a/src/components/admin/TestManager.jsx +++ b/src/components/admin/TestManager.jsx @@ -34,7 +34,7 @@ const TestManager = () => { loadData(); }, [selectedTopic]); - const handleGenerate = async (topic, count = 10) => { + const handleGenerate = async (topic, count = 5) => { setLoadingTopicId(topic.id); setError(null); try { @@ -97,8 +97,8 @@ const TestManager = () => { {questions.length === 0 ? (

No questions generated for this topic yet.

-
) : ( diff --git a/src/lib/testService.js b/src/lib/testService.js index b6daa36..1329e98 100644 --- a/src/lib/testService.js +++ b/src/lib/testService.js @@ -7,7 +7,7 @@ const QUIZ_SYSTEM = `You are a quiz generator for Respellion, an internal IT com You generate multiple-choice questions to test employee knowledge on specific topics. Always write in clear, professional English. -Emit questions through the emit_quiz_questions tool. Each question has exactly four options; correctIndex is 0-based; mix difficulty roughly 4 easy / 4 medium / 2 hard.`; +Emit questions through the emit_quiz_questions tool. Each question has exactly four options; correctIndex is 0-based. For a typical 5-question batch, mix difficulty roughly 2 easy / 2 medium / 1 hard; scale the ratio proportionally for larger batches.`; const cachedSystem = (text) => [{ type: 'text', text, cache_control: { type: 'ephemeral' } }]; @@ -67,7 +67,7 @@ export async function getCachedQuiz(userId, weekNumber) { return db.getCachedQuiz(userId, weekNumber); } -export async function forceGenerateTopicQuestions(topic, count = 10) { +export async function forceGenerateTopicQuestions(topic, count = 5) { let bank = await db.getQuizBank(topic.id); const prompt = `Generate exactly ${count} multiple-choice quiz questions for this knowledge topic and emit them via the emit_quiz_questions tool: @@ -105,7 +105,9 @@ async function getOrGenerateTopicQuestions(topic, count) { let bank = await db.getQuizBank(topic.id); if (bank.length < count) { - await forceGenerateTopicQuestions(topic, 10); + // Seed an empty/low bank with a small initial batch; admins can grow it + // explicitly via TestManager when they want more depth per topic. + await forceGenerateTopicQuestions(topic, 5); bank = await db.getQuizBank(topic.id); }