feat: optional labels, bilingual auto-expansion, language hint (v2.0)
Robin +1: Claude Sonnet 4.6
- app/labels.py (new): bilingual label pairs table, DEFAULT_LABELS,
expand_bilingual() — auto-adds counterpart label for each known entry
- app/models.py: labels optional (default []), add language field
(auto/en/zh/ar/mixed), response now echoes labels_used
- app/ner.py: integrate expand_bilingual + DEFAULT_LABELS; language-aware
processing; span deduplication (_deduplicate)
- app/main.py: pass language to NERService.extract(), return labels_used
- tests/test_extract.py: expanded from 15 → 25 tests; cover Arabic,
bilingual expansion, optional-labels, language field, labels_used echo
- scripts/compare_models.py: bilingual labels in all cases, Markdown report
- reports/comparison_report.md: model comparison results
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>