milwright commited on
Commit
d5848fc
·
1 Parent(s): 9e0745a

Add word length validation to batch processing

Browse files

- Enforce level-based word length constraints in processBothPassages
- Add validation logging for batch word selection
- Prevent oversized words like 'penetrating' for levels 3-4

Files changed (1) hide show
  1. src/aiService.js +22 -0
src/aiService.js CHANGED
@@ -411,6 +411,28 @@ Return as JSON: {"passage1": {...}, "passage2": {...}}`
411
  parsed.passage1.words = parsed.passage1.words.filter(word => word && word.trim() !== '');
412
  parsed.passage2.words = parsed.passage2.words.filter(word => word && word.trim() !== '');
413
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
414
  return parsed;
415
  } catch (e) {
416
  console.error('Failed to parse batch response:', e);
 
411
  parsed.passage1.words = parsed.passage1.words.filter(word => word && word.trim() !== '');
412
  parsed.passage2.words = parsed.passage2.words.filter(word => word && word.trim() !== '');
413
 
414
+ // Validate word lengths based on level
415
+ const validateWords = (words) => {
416
+ return words.filter(word => {
417
+ const cleanWord = word.replace(/[^a-zA-Z]/g, '');
418
+ if (level <= 2) {
419
+ return cleanWord.length >= 4 && cleanWord.length <= 7;
420
+ } else if (level <= 4) {
421
+ return cleanWord.length >= 4 && cleanWord.length <= 10;
422
+ } else {
423
+ return cleanWord.length >= 5 && cleanWord.length <= 14;
424
+ }
425
+ });
426
+ };
427
+
428
+ const originalP1Count = parsed.passage1.words.length;
429
+ const originalP2Count = parsed.passage2.words.length;
430
+
431
+ parsed.passage1.words = validateWords(parsed.passage1.words);
432
+ parsed.passage2.words = validateWords(parsed.passage2.words);
433
+
434
+ console.log(`✅ Level ${level} batch validation: P1 ${parsed.passage1.words.length}/${originalP1Count}, P2 ${parsed.passage2.words.length}/${originalP2Count} words passed`);
435
+
436
  return parsed;
437
  } catch (e) {
438
  console.error('Failed to parse batch response:', e);