milwright commited on
Commit
4f8034e
·
1 Parent(s): e38d8d4

fix: clean contextualization artifacts and ensure passages start properly

Browse files

- Remove word-colon patterns like 'mas:' from AI responses
- Always start passages with first word of complete sentence
- Find capital letter after punctuation for proper sentence starts
- Fallback to first capital letter if no sentence break found

Files changed (2) hide show
  1. src/aiService.js +4 -3
  2. src/clozeGameEngine.js +11 -4
src/aiService.js CHANGED
@@ -74,10 +74,10 @@ class OpenRouterService {
74
 
75
  let content = data.choices[0].message.content.trim();
76
 
77
- // Clean up AI response artifacts
78
  content = content
79
  .replace(/^\s*["']|["']\s*$/g, '') // Remove leading/trailing quotes
80
- .replace(/^\s*:+\s*/, '') // Remove leading colons
81
  .replace(/\*+/g, '') // Remove asterisks (markdown bold/italic)
82
  .replace(/_+/g, '') // Remove underscores (markdown)
83
  .replace(/#+\s*/g, '') // Remove hash symbols (markdown headers)
@@ -212,7 +212,8 @@ Passage: "${passage}"`
212
  // Clean up AI response artifacts
213
  content = content
214
  .replace(/^\s*["']|["']\s*$/g, '') // Remove leading/trailing quotes
215
- .replace(/^\s*:+\s*/, '') // Remove leading colons
 
216
  .replace(/\*+/g, '') // Remove asterisks (markdown bold/italic)
217
  .replace(/_+/g, '') // Remove underscores (markdown)
218
  .replace(/#+\s*/g, '') // Remove hash symbols (markdown headers)
 
74
 
75
  let content = data.choices[0].message.content.trim();
76
 
77
+ // Clean up AI response artifacts
78
  content = content
79
  .replace(/^\s*["']|["']\s*$/g, '') // Remove leading/trailing quotes
80
+ .replace(/^\s*[:;]+\s*/, '') // Remove leading colons and semicolons
81
  .replace(/\*+/g, '') // Remove asterisks (markdown bold/italic)
82
  .replace(/_+/g, '') // Remove underscores (markdown)
83
  .replace(/#+\s*/g, '') // Remove hash symbols (markdown headers)
 
212
  // Clean up AI response artifacts
213
  content = content
214
  .replace(/^\s*["']|["']\s*$/g, '') // Remove leading/trailing quotes
215
+ .replace(/^\s*[:;]+\s*/, '') // Remove leading colons and semicolons
216
+ .replace(/^\s*[a-z]+:\s*/i, '') // Remove any word followed by colon (like "mas:")
217
  .replace(/\*+/g, '') // Remove asterisks (markdown bold/italic)
218
  .replace(/_+/g, '') // Remove underscores (markdown)
219
  .replace(/#+\s*/g, '') // Remove hash symbols (markdown headers)
src/clozeGameEngine.js CHANGED
@@ -76,10 +76,17 @@ class ClozeGame {
76
  // Extract longer initial passage for better sentence completion
77
  let passage = text.substring(startIndex, startIndex + 1000);
78
 
79
- // Clean up start - find first complete sentence
80
- const firstSentenceEnd = passage.search(/[.!?]\s+[A-Z]/);
81
- if (firstSentenceEnd > 0 && firstSentenceEnd < 200) {
82
- passage = passage.substring(firstSentenceEnd + 2);
 
 
 
 
 
 
 
83
  }
84
 
85
  // Clean up end - ensure we end at a complete sentence
 
76
  // Extract longer initial passage for better sentence completion
77
  let passage = text.substring(startIndex, startIndex + 1000);
78
 
79
+ // Clean up start - find first complete sentence that starts with capital letter
80
+ const firstSentenceMatch = passage.match(/[.!?]\s+([A-Z][^.!?]*)/);
81
+ if (firstSentenceMatch && firstSentenceMatch.index < 200) {
82
+ // Start from the capital letter after punctuation
83
+ passage = passage.substring(firstSentenceMatch.index + firstSentenceMatch[0].length - firstSentenceMatch[1].length);
84
+ } else {
85
+ // If no good sentence break found, find first capital letter
86
+ const firstCapitalMatch = passage.match(/[A-Z][^.!?]*/);
87
+ if (firstCapitalMatch) {
88
+ passage = passage.substring(firstCapitalMatch.index);
89
+ }
90
  }
91
 
92
  // Clean up end - ensure we end at a complete sentence