feat(example): add L2 classifications for 823/988 WoN entities (S3.4)
Batch classification via OpenRouter (claude-sonnet-4). 165 entities
remain unclassified due to credit exhaustion; incremental skip means
a follow-up run will complete them automatically.
Type × VSM matrix (823 entities):
S1 S2 S3 S3* S4 S5
Element 86 75 58 21 43 32 (315 total, 38%)
Process 39 42 37 17 67 24 (226 total, 28%)
Institution 4 12 30 24 . 52 (122 total, 15%)
Principle 3 7 15 2 43 32 (102 total, 12%)
Relation 2 14 5 5 22 10 (58 total, 7%)
Matrix fill: 29/30 cells (Institution/S4 empty — expected)
Metrics updated: type_entropy=2.0936, vsm_type_matrix_cells=29
Also:
- BatchEvaluator gains delay_seconds param for rate-limited providers
- classify CLI gains --rpm option (--rpm 10 for Gemini free tier)
- history.write_metrics_file now handles non-float metric values
(type_distribution is a dict, was crashing round())
- run_entity_classification forwards delay_seconds to BatchEvaluator
- classify-links and graph commands added by user (entities --by-type,
graph --format mermaid/dot, classify-links for Relation enrichment)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -102,11 +102,13 @@ class BatchEvaluator:
|
||||
config: Optional[RunConfig] = None,
|
||||
progress_callback: Optional[Callable[[int, int, BatchResult], None]] = None,
|
||||
previous_digests: Optional[Dict[str, str]] = None,
|
||||
delay_seconds: float = 0.0,
|
||||
):
|
||||
self._adapter = adapter
|
||||
self._config = config or RunConfig()
|
||||
self._progress_callback = progress_callback
|
||||
self._previous_digests = previous_digests or {}
|
||||
self._delay_seconds = delay_seconds
|
||||
|
||||
def evaluate(self, items: List[BatchItem]) -> BatchSummary:
|
||||
"""Run evaluation for all items and return aggregate results.
|
||||
@@ -116,9 +118,13 @@ class BatchEvaluator:
|
||||
the LLM adapter. Errors on individual items are captured
|
||||
without aborting the batch.
|
||||
"""
|
||||
import time as _time
|
||||
|
||||
summary = BatchSummary(total=len(items))
|
||||
|
||||
for idx, item in enumerate(items):
|
||||
if idx > 0 and self._delay_seconds > 0:
|
||||
_time.sleep(self._delay_seconds)
|
||||
result = self._evaluate_one(item)
|
||||
summary.results.append(result)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user