Add A/B testing toggles for OCR quality steps
Some checks failed
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-school (push) Successful in 30s
CI / test-go-edu-search (push) Successful in 28s
CI / test-python-klausur (push) Failing after 2m33s
CI / test-python-agent-core (push) Successful in 26s
CI / test-nodejs-website (push) Successful in 18s
Some checks failed
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-school (push) Successful in 30s
CI / test-go-edu-search (push) Successful in 28s
CI / test-python-klausur (push) Failing after 2m33s
CI / test-python-agent-core (push) Successful in 26s
CI / test-nodejs-website (push) Successful in 18s
Each quality improvement step can now be toggled independently: - CLAHE checkbox (Step 3: image enhancement on/off) - MaxCols dropdown (Step 2: 0=unlimited, 2-5) - MinConf dropdown (Step 1: auto/20/30/40/50/60) Backend: Query params enhance, max_cols, min_conf on process-single-page. Response includes active_steps dict showing which steps are enabled. Frontend: Toggle controls in VocabularyTab above the table. This allows empirical A/B testing of each step on the same scan. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -120,6 +120,36 @@ export function VocabularyTab({ h }: { h: VocabWorksheetHook }) {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* OCR Quality Steps (A/B Testing) */}
|
||||
<div className={`flex items-center gap-3 mb-3 flex-shrink-0 flex-wrap ${isDark ? 'text-white/60' : 'text-slate-500'}`}>
|
||||
<span className="text-xs font-medium">Steps:</span>
|
||||
<label className="flex items-center gap-1 text-xs cursor-pointer">
|
||||
<input type="checkbox" checked={h.ocrEnhance} onChange={(e) => h.setOcrEnhance(e.target.checked)} className="rounded" />
|
||||
CLAHE
|
||||
</label>
|
||||
<label className="flex items-center gap-1 text-xs">
|
||||
<span>MaxCols:</span>
|
||||
<select value={h.ocrMaxCols} onChange={(e) => h.setOcrMaxCols(Number(e.target.value))} className={`px-1 py-0.5 text-xs rounded border ${isDark ? 'border-white/20 bg-white/10 text-white' : 'border-gray-200 bg-white text-gray-600'}`}>
|
||||
<option value={0}>unbegrenzt</option>
|
||||
<option value={2}>2</option>
|
||||
<option value={3}>3</option>
|
||||
<option value={4}>4</option>
|
||||
<option value={5}>5</option>
|
||||
</select>
|
||||
</label>
|
||||
<label className="flex items-center gap-1 text-xs">
|
||||
<span>MinConf:</span>
|
||||
<select value={h.ocrMinConf} onChange={(e) => h.setOcrMinConf(Number(e.target.value))} className={`px-1 py-0.5 text-xs rounded border ${isDark ? 'border-white/20 bg-white/10 text-white' : 'border-gray-200 bg-white text-gray-600'}`}>
|
||||
<option value={0}>auto</option>
|
||||
<option value={20}>20</option>
|
||||
<option value={30}>30</option>
|
||||
<option value={40}>40</option>
|
||||
<option value={50}>50</option>
|
||||
<option value={60}>60</option>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
{/* Error messages for failed pages */}
|
||||
{h.processingErrors.length > 0 && (
|
||||
<div className={`rounded-xl p-3 mb-3 flex-shrink-0 ${isDark ? 'bg-orange-500/20 text-orange-200 border border-orange-500/30' : 'bg-orange-100 text-orange-700 border border-orange-200'}`}>
|
||||
|
||||
Reference in New Issue
Block a user