Commit Β·
bc61ea7
1
Parent(s): 81f6090
eval: multi-model benchmark - nano is Pareto-optimal (0.896 micro F1 at 0.0116/doc)
Browse files- README.md +38 -4
- evaluation/benchmarks/20260705T064740Z/comparison.csv +4 -0
- evaluation/benchmarks/20260705T064740Z/comparison.json +52 -0
- evaluation/benchmarks/20260705T064740Z/comparison.md +14 -0
- evaluation/benchmarks/20260705T064740Z/gpt-5-mini_minimal_cord/receipt_gpt-5-mini_re-minimal_per_record.csv +71 -0
- evaluation/benchmarks/20260705T064740Z/gpt-5-mini_minimal_cord/receipt_gpt-5-mini_re-minimal_summary.json +312 -0
- evaluation/benchmarks/20260705T064740Z/gpt-5-mini_minimal_cord/receipt_gpt-5-mini_re-minimal_summary.md +40 -0
- evaluation/benchmarks/20260705T064740Z/gpt-5-mini_minimal_sroie/receipt_gpt-5-mini_re-minimal_per_record.csv +44 -0
- evaluation/benchmarks/20260705T064740Z/gpt-5-mini_minimal_sroie/receipt_gpt-5-mini_re-minimal_summary.json +240 -0
- evaluation/benchmarks/20260705T064740Z/gpt-5-mini_minimal_sroie/receipt_gpt-5-mini_re-minimal_summary.md +33 -0
- evaluation/benchmarks/20260705T064740Z/gpt-5-nano_minimal_cord/receipt_gpt-5-nano_re-minimal_per_record.csv +71 -0
- evaluation/benchmarks/20260705T064740Z/gpt-5-nano_minimal_cord/receipt_gpt-5-nano_re-minimal_summary.json +312 -0
- evaluation/benchmarks/20260705T064740Z/gpt-5-nano_minimal_cord/receipt_gpt-5-nano_re-minimal_summary.md +40 -0
- evaluation/benchmarks/20260705T064740Z/gpt-5-nano_minimal_sroie/receipt_gpt-5-nano_re-minimal_per_record.csv +34 -0
- evaluation/benchmarks/20260705T064740Z/gpt-5-nano_minimal_sroie/receipt_gpt-5-nano_re-minimal_summary.json +240 -0
- evaluation/benchmarks/20260705T064740Z/gpt-5-nano_minimal_sroie/receipt_gpt-5-nano_re-minimal_summary.md +30 -0
- evaluation/benchmarks/20260705T064740Z/gpt-5_minimal_cord/receipt_gpt-5_re-minimal_per_record.csv +71 -0
- evaluation/benchmarks/20260705T064740Z/gpt-5_minimal_cord/receipt_gpt-5_re-minimal_summary.json +312 -0
- evaluation/benchmarks/20260705T064740Z/gpt-5_minimal_cord/receipt_gpt-5_re-minimal_summary.md +40 -0
- evaluation/benchmarks/20260705T064740Z/gpt-5_minimal_sroie/receipt_gpt-5_re-minimal_per_record.csv +43 -0
- evaluation/benchmarks/20260705T064740Z/gpt-5_minimal_sroie/receipt_gpt-5_re-minimal_summary.json +240 -0
- evaluation/benchmarks/20260705T064740Z/gpt-5_minimal_sroie/receipt_gpt-5_re-minimal_summary.md +32 -0
- scripts/run_multimodel_benchmark.py +213 -0
README.md
CHANGED
|
@@ -39,7 +39,7 @@ Enterprise doc extraction is one of the highest-demand LLM use cases in 2026. Th
|
|
| 39 |
- Schema-driven extraction with **OpenAI structured outputs** + Pydantic validation
|
| 40 |
- **Vision-language handling** for scanned/image PDFs (GPT-5 nano vision)
|
| 41 |
- **Long-document handling** for 10-K / 10-Q filings (400K context, minimal chunking)
|
| 42 |
-
- **Multi-model benchmarking** β
|
| 43 |
- **Evaluation harness** with precision / recall / F1 on public ground truth (SROIE, CORD)
|
| 44 |
- **Cost + latency observability** β every extraction logs tokens and $
|
| 45 |
- Full-stack: **FastAPI** backend, **React + Motion + R3F** UI, **Docker**, GitHub Actions **CI**
|
|
@@ -99,8 +99,42 @@ python scripts/run_eval.py \
|
|
| 99 |
--reasoning-effort minimal
|
| 100 |
```
|
| 101 |
|
| 102 |
-
|
| 103 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 104 |
|
| 105 |
## Architecture
|
| 106 |
|
|
@@ -129,7 +163,7 @@ PDFs from the SROIE test split for a stricter, OCR-inclusive number.
|
|
| 129 |
|
| 130 |
| Layer | Choice | Why |
|
| 131 |
|-------|--------|-----|
|
| 132 |
-
| LLM | OpenAI GPT-5 nano (default) +
|
| 133 |
| Schema | Pydantic v2 | Runtime validation + JSON schema for OpenAI |
|
| 134 |
| PDF text | pdfplumber, PyMuPDF | Fast, robust, handles most layouts |
|
| 135 |
| PDF images | pdf2image + Pillow | For scanned/image-heavy PDFs β vision model |
|
|
|
|
| 39 |
- Schema-driven extraction with **OpenAI structured outputs** + Pydantic validation
|
| 40 |
- **Vision-language handling** for scanned/image PDFs (GPT-5 nano vision)
|
| 41 |
- **Long-document handling** for 10-K / 10-Q filings (400K context, minimal chunking)
|
| 42 |
+
- **Multi-model benchmarking** β empirically compared gpt-5-nano vs gpt-5-mini vs gpt-5 on the same 10-record eval; nano is Pareto-optimal (micro F1 0.896 at $0.012/doc)
|
| 43 |
- **Evaluation harness** with precision / recall / F1 on public ground truth (SROIE, CORD)
|
| 44 |
- **Cost + latency observability** β every extraction logs tokens and $
|
| 45 |
- Full-stack: **FastAPI** backend, **React + Motion + R3F** UI, **Docker**, GitHub Actions **CI**
|
|
|
|
| 99 |
--reasoning-effort minimal
|
| 100 |
```
|
| 101 |
|
| 102 |
+
### Multi-model comparison (2026-07-05)
|
| 103 |
+
|
| 104 |
+
Same 10 records, same prompts, same schemas β only the model changes. All runs
|
| 105 |
+
use `reasoning_effort="minimal"`. Reports land under `evaluation/benchmarks/<timestamp>/`.
|
| 106 |
+
|
| 107 |
+
| Model | Micro F1 | Macro F1 | Doc-exact | Latency | Cost / doc |
|
| 108 |
+
|---------------|-----------|-----------|-----------|----------|------------|
|
| 109 |
+
| `gpt-5-nano` | **0.896** | 0.885 | 40 % | 5.1 s | **$0.0116** |
|
| 110 |
+
| `gpt-5-mini` | 0.864 | 0.927 | 40 % | 6.1 s | $0.0127 |
|
| 111 |
+
| `gpt-5` | 0.884 | **0.939** | 30 % | 5.4 s | $0.0118 |
|
| 112 |
+
|
| 113 |
+
**Read the numbers:**
|
| 114 |
+
- **`gpt-5-nano` is Pareto-optimal on this workload** β highest micro F1 at the
|
| 115 |
+
lowest cost and lowest latency. Bigger tiers don't buy quality on high-support
|
| 116 |
+
fields.
|
| 117 |
+
- **`gpt-5` and `gpt-5-mini` lead on macro F1** β they're measurably better on
|
| 118 |
+
the rarer fields (macro weights every field equally regardless of support).
|
| 119 |
+
If your extraction schema is long-tailed, the ~7 % macro-F1 lift may be worth
|
| 120 |
+
the small extra spend.
|
| 121 |
+
- **Doc-exact stays 30-40 % across all three** β an artifact of a strict metric
|
| 122 |
+
and a schema with many optional fields. Micro F1 tracks real quality here.
|
| 123 |
+
- **Total benchmark spend: $0.36** to definitively answer "which model should
|
| 124 |
+
ship in prod?" β this is the kind of question worth measuring instead of
|
| 125 |
+
guessing at, and it's cheap enough to re-run whenever the prompt or schema
|
| 126 |
+
moves.
|
| 127 |
+
|
| 128 |
+
Reproduce:
|
| 129 |
+
|
| 130 |
+
```bash
|
| 131 |
+
python scripts/run_multimodel_benchmark.py
|
| 132 |
+
# or with a custom matrix:
|
| 133 |
+
python scripts/run_multimodel_benchmark.py gpt-5-nano:minimal gpt-5-mini:minimal gpt-4o-mini
|
| 134 |
+
```
|
| 135 |
+
|
| 136 |
+
Next: real image PDFs from the SROIE test split for a stricter, OCR-inclusive
|
| 137 |
+
number, then the SEC 10-K schema for the long-doc / dual-domain story.
|
| 138 |
|
| 139 |
## Architecture
|
| 140 |
|
|
|
|
| 163 |
|
| 164 |
| Layer | Choice | Why |
|
| 165 |
|-------|--------|-----|
|
| 166 |
+
| LLM | OpenAI GPT-5 nano (default) + benchmarked vs GPT-5 mini + GPT-5 full | 400K context, vision, structured outputs, ~50x cheaper than GPT-4o |
|
| 167 |
| Schema | Pydantic v2 | Runtime validation + JSON schema for OpenAI |
|
| 168 |
| PDF text | pdfplumber, PyMuPDF | Fast, robust, handles most layouts |
|
| 169 |
| PDF images | pdf2image + Pillow | For scanned/image-heavy PDFs β vision model |
|
evaluation/benchmarks/20260705T064740Z/comparison.csv
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
model,reasoning_effort,micro_f1,macro_f1,doc_exact_match,mean_latency_ms,mean_cost_usd,total_cost_usd,wall_time_s,n_docs,errors
|
| 2 |
+
gpt-5-nano,minimal,0.8963,0.8852,0.4,5098.0,0.011635,0.1164,51.0,10,0
|
| 3 |
+
gpt-5-mini,minimal,0.8639,0.9274,0.4,6115.0,0.012694,0.1269,61.16,10,0
|
| 4 |
+
gpt-5,minimal,0.8843,0.9393,0.3,5377.0,0.011822,0.1183,53.78,10,0
|
evaluation/benchmarks/20260705T064740Z/comparison.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"generated_at": "2026-07-05T06:50:39.328401+00:00",
|
| 3 |
+
"matrix": [
|
| 4 |
+
{
|
| 5 |
+
"model": "gpt-5-nano",
|
| 6 |
+
"reasoning_effort": "minimal"
|
| 7 |
+
},
|
| 8 |
+
{
|
| 9 |
+
"model": "gpt-5-mini",
|
| 10 |
+
"reasoning_effort": "minimal"
|
| 11 |
+
},
|
| 12 |
+
{
|
| 13 |
+
"model": "gpt-5",
|
| 14 |
+
"reasoning_effort": "minimal"
|
| 15 |
+
}
|
| 16 |
+
],
|
| 17 |
+
"results": {
|
| 18 |
+
"gpt-5-nano@minimal": {
|
| 19 |
+
"n_docs": 10,
|
| 20 |
+
"errors": 0,
|
| 21 |
+
"micro_f1": 0.8963,
|
| 22 |
+
"macro_f1": 0.8852,
|
| 23 |
+
"doc_exact_match": 0.4,
|
| 24 |
+
"mean_latency_ms": 5098.0,
|
| 25 |
+
"mean_cost_usd": 0.011635,
|
| 26 |
+
"total_cost_usd": 0.1164,
|
| 27 |
+
"wall_time_s": 51.0
|
| 28 |
+
},
|
| 29 |
+
"gpt-5-mini@minimal": {
|
| 30 |
+
"n_docs": 10,
|
| 31 |
+
"errors": 0,
|
| 32 |
+
"micro_f1": 0.8639,
|
| 33 |
+
"macro_f1": 0.9274,
|
| 34 |
+
"doc_exact_match": 0.4,
|
| 35 |
+
"mean_latency_ms": 6115.0,
|
| 36 |
+
"mean_cost_usd": 0.012694,
|
| 37 |
+
"total_cost_usd": 0.1269,
|
| 38 |
+
"wall_time_s": 61.16
|
| 39 |
+
},
|
| 40 |
+
"gpt-5@minimal": {
|
| 41 |
+
"n_docs": 10,
|
| 42 |
+
"errors": 0,
|
| 43 |
+
"micro_f1": 0.8843,
|
| 44 |
+
"macro_f1": 0.9393,
|
| 45 |
+
"doc_exact_match": 0.3,
|
| 46 |
+
"mean_latency_ms": 5377.0,
|
| 47 |
+
"mean_cost_usd": 0.011822,
|
| 48 |
+
"total_cost_usd": 0.1183,
|
| 49 |
+
"wall_time_s": 53.78
|
| 50 |
+
}
|
| 51 |
+
}
|
| 52 |
+
}
|
evaluation/benchmarks/20260705T064740Z/comparison.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Multi-model benchmark
|
| 2 |
+
|
| 3 |
+
_Generated: 2026-07-05T06:50:39+00:00_
|
| 4 |
+
|
| 5 |
+
10 receipts (5 SROIE + 5 CORD), synthetic text derived from public ground truth.
|
| 6 |
+
All runs use the same prompts, schemas, and post-processing β the only variable is the model.
|
| 7 |
+
|
| 8 |
+
| Model | Effort | Micro F1 | Macro F1 | Doc-exact | Latency (ms) | Cost / doc | Total cost |
|
| 9 |
+
|---|---|---:|---:|---:|---:|---:|---:|
|
| 10 |
+
| `gpt-5-nano` | minimal | 0.896 | 0.885 | 40% | 5098 | $0.01163 | $0.1164 |
|
| 11 |
+
| `gpt-5-mini` | minimal | 0.864 | 0.927 | 40% | 6115 | $0.01269 | $0.1269 |
|
| 12 |
+
| `gpt-5` | minimal | 0.884 | 0.939 | 30% | 5377 | $0.01182 | $0.1183 |
|
| 13 |
+
|
| 14 |
+
_Field-level breakdowns live in each combo's per-run report under `evaluation/reports/`._
|
evaluation/benchmarks/20260705T064740Z/gpt-5-mini_minimal_cord/receipt_gpt-5-mini_re-minimal_per_record.csv
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
doc_id,field,field_type,predicted,truth,outcome,score,latency_ms,cost_usd
|
| 2 |
+
cord_sample_001,currency,exact,KRW,KRW,TP,1.0,7314.9,0.013705
|
| 3 |
+
cord_sample_001,line_items[0].description,text,Iced Americano,Iced Americano,TP,1.0,7314.9,0.013705
|
| 4 |
+
cord_sample_001,line_items[0].quantity,number,1,1,TP,1.0,7314.9,0.013705
|
| 5 |
+
cord_sample_001,line_items[0].total,money,4500,4500,TP,1.0,7314.9,0.013705
|
| 6 |
+
cord_sample_001,line_items[0].unit_price,money,4500,4500,TP,1.0,7314.9,0.013705
|
| 7 |
+
cord_sample_001,line_items[1].description,text,Choco Chip Muffin,Choco Chip Muffin,TP,1.0,7314.9,0.013705
|
| 8 |
+
cord_sample_001,line_items[1].quantity,number,1,1,TP,1.0,7314.9,0.013705
|
| 9 |
+
cord_sample_001,line_items[1].total,money,3800,3800,TP,1.0,7314.9,0.013705
|
| 10 |
+
cord_sample_001,line_items[1].unit_price,money,3800,3800,TP,1.0,7314.9,0.013705
|
| 11 |
+
cord_sample_001,line_items[],number,2,2,TP,1.0,7314.9,0.013705
|
| 12 |
+
cord_sample_001,merchant,text,Unknown merchant,Unknown merchant,TP,1.0,7314.9,0.013705
|
| 13 |
+
cord_sample_001,subtotal,money,8300,8300,TP,1.0,7314.9,0.013705
|
| 14 |
+
cord_sample_001,tax,money,830,830,TP,1.0,7314.9,0.013705
|
| 15 |
+
cord_sample_001,total,money,9130,9130,TP,1.0,7314.9,0.013705
|
| 16 |
+
cord_sample_002,currency,exact,KRW,KRW,TP,1.0,7341.9,0.014632
|
| 17 |
+
cord_sample_002,line_items[0].description,text,Bibimbap Set,Bibimbap Set,TP,1.0,7341.9,0.014632
|
| 18 |
+
cord_sample_002,line_items[0].quantity,number,2,2,TP,1.0,7341.9,0.014632
|
| 19 |
+
cord_sample_002,line_items[0].total,money,,24000,FN,0.0,7341.9,0.014632
|
| 20 |
+
cord_sample_002,line_items[0].unit_price,money,24000,12000,MISMATCH,0.0,7341.9,0.014632
|
| 21 |
+
cord_sample_002,line_items[1].description,text,Miso Soup,Miso Soup,TP,1.0,7341.9,0.014632
|
| 22 |
+
cord_sample_002,line_items[1].quantity,number,2,2,TP,1.0,7341.9,0.014632
|
| 23 |
+
cord_sample_002,line_items[1].total,money,,5000,FN,0.0,7341.9,0.014632
|
| 24 |
+
cord_sample_002,line_items[1].unit_price,money,5000,2500,MISMATCH,0.0,7341.9,0.014632
|
| 25 |
+
cord_sample_002,line_items[],number,2,2,TP,1.0,7341.9,0.014632
|
| 26 |
+
cord_sample_002,merchant,text,Unknown merchant,Unknown merchant,TP,1.0,7341.9,0.014632
|
| 27 |
+
cord_sample_002,subtotal,money,29000,29000,TP,1.0,7341.9,0.014632
|
| 28 |
+
cord_sample_002,tax,money,2900,2900,TP,1.0,7341.9,0.014632
|
| 29 |
+
cord_sample_002,total,money,31900,31900,TP,1.0,7341.9,0.014632
|
| 30 |
+
cord_sample_003,currency,exact,KRW,KRW,TP,1.0,5556.7,0.011397
|
| 31 |
+
cord_sample_003,line_items[0].description,text,Latte,Latte,TP,1.0,5556.7,0.011397
|
| 32 |
+
cord_sample_003,line_items[0].quantity,number,1,1,TP,1.0,5556.7,0.011397
|
| 33 |
+
cord_sample_003,line_items[0].total,money,5000,5000,TP,1.0,5556.7,0.011397
|
| 34 |
+
cord_sample_003,line_items[0].unit_price,money,5000,5000,TP,1.0,5556.7,0.011397
|
| 35 |
+
cord_sample_003,line_items[],number,1,1,TP,1.0,5556.7,0.011397
|
| 36 |
+
cord_sample_003,merchant,text,Unknown merchant,Unknown merchant,TP,1.0,5556.7,0.011397
|
| 37 |
+
cord_sample_003,subtotal,money,5000,5000,TP,1.0,5556.7,0.011397
|
| 38 |
+
cord_sample_003,tax,money,500,500,TP,1.0,5556.7,0.011397
|
| 39 |
+
cord_sample_003,total,money,5500,5500,TP,1.0,5556.7,0.011397
|
| 40 |
+
cord_sample_004,currency,exact,KRW,KRW,TP,1.0,7191.9,0.014805
|
| 41 |
+
cord_sample_004,line_items[0].description,text,Kimchi Fried Rice,Kimchi Fried Rice,TP,1.0,7191.9,0.014805
|
| 42 |
+
cord_sample_004,line_items[0].quantity,number,1,1,TP,1.0,7191.9,0.014805
|
| 43 |
+
cord_sample_004,line_items[0].total,money,9500,9500,TP,1.0,7191.9,0.014805
|
| 44 |
+
cord_sample_004,line_items[0].unit_price,money,,9500,FN,0.0,7191.9,0.014805
|
| 45 |
+
cord_sample_004,line_items[1].description,text,Egg Roll,Egg Roll,TP,1.0,7191.9,0.014805
|
| 46 |
+
cord_sample_004,line_items[1].quantity,number,1,1,TP,1.0,7191.9,0.014805
|
| 47 |
+
cord_sample_004,line_items[1].total,money,3500,3500,TP,1.0,7191.9,0.014805
|
| 48 |
+
cord_sample_004,line_items[1].unit_price,money,,3500,FN,0.0,7191.9,0.014805
|
| 49 |
+
cord_sample_004,line_items[2].description,text,Soft Drink,Soft Drink,TP,1.0,7191.9,0.014805
|
| 50 |
+
cord_sample_004,line_items[2].quantity,number,2,2,TP,1.0,7191.9,0.014805
|
| 51 |
+
cord_sample_004,line_items[2].total,money,4000,4000,TP,1.0,7191.9,0.014805
|
| 52 |
+
cord_sample_004,line_items[2].unit_price,money,,2000,FN,0.0,7191.9,0.014805
|
| 53 |
+
cord_sample_004,line_items[],number,3,3,TP,1.0,7191.9,0.014805
|
| 54 |
+
cord_sample_004,merchant,text,Unknown merchant,Unknown merchant,TP,1.0,7191.9,0.014805
|
| 55 |
+
cord_sample_004,subtotal,money,17000,17000,TP,1.0,7191.9,0.014805
|
| 56 |
+
cord_sample_004,tax,money,1700,1700,TP,1.0,7191.9,0.014805
|
| 57 |
+
cord_sample_004,total,money,18700,18700,TP,1.0,7191.9,0.014805
|
| 58 |
+
cord_sample_005,currency,exact,KRW,KRW,TP,1.0,5980.1,0.01317
|
| 59 |
+
cord_sample_005,line_items[0].description,text,Espresso,Espresso,TP,1.0,5980.1,0.01317
|
| 60 |
+
cord_sample_005,line_items[0].quantity,number,1,1,TP,1.0,5980.1,0.01317
|
| 61 |
+
cord_sample_005,line_items[0].total,money,3500,3500,TP,1.0,5980.1,0.01317
|
| 62 |
+
cord_sample_005,line_items[0].unit_price,money,3500,3500,TP,1.0,5980.1,0.01317
|
| 63 |
+
cord_sample_005,line_items[1].description,text,Cheesecake Slice,Cheesecake Slice,TP,1.0,5980.1,0.01317
|
| 64 |
+
cord_sample_005,line_items[1].quantity,number,1,1,TP,1.0,5980.1,0.01317
|
| 65 |
+
cord_sample_005,line_items[1].total,money,6500,6500,TP,1.0,5980.1,0.01317
|
| 66 |
+
cord_sample_005,line_items[1].unit_price,money,6500,6500,TP,1.0,5980.1,0.01317
|
| 67 |
+
cord_sample_005,line_items[],number,2,2,TP,1.0,5980.1,0.01317
|
| 68 |
+
cord_sample_005,merchant,text,Unknown merchant,Unknown merchant,TP,1.0,5980.1,0.01317
|
| 69 |
+
cord_sample_005,subtotal,money,10000,10000,TP,1.0,5980.1,0.01317
|
| 70 |
+
cord_sample_005,tax,money,1000,1000,TP,1.0,5980.1,0.01317
|
| 71 |
+
cord_sample_005,total,money,11000,11000,TP,1.0,5980.1,0.01317
|
evaluation/benchmarks/20260705T064740Z/gpt-5-mini_minimal_cord/receipt_gpt-5-mini_re-minimal_summary.json
ADDED
|
@@ -0,0 +1,312 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"generated_at": "2026-07-05T06:49:41.326652+00:00",
|
| 3 |
+
"summary": {
|
| 4 |
+
"model": "gpt-5-mini_re-minimal",
|
| 5 |
+
"doc_type": "receipt",
|
| 6 |
+
"n_docs": 5,
|
| 7 |
+
"errors": 0,
|
| 8 |
+
"micro_f1": 0.9333,
|
| 9 |
+
"macro_f1": 0.888,
|
| 10 |
+
"doc_exact_match": 0.6,
|
| 11 |
+
"mean_latency_ms": 6677.1,
|
| 12 |
+
"mean_cost_usd": 0.013542,
|
| 13 |
+
"total_cost_usd": 0.0677,
|
| 14 |
+
"wall_time_s": 33.39
|
| 15 |
+
},
|
| 16 |
+
"aggregate": {
|
| 17 |
+
"micro_precision": 0.9692,
|
| 18 |
+
"micro_recall": 0.9,
|
| 19 |
+
"micro_f1": 0.9333,
|
| 20 |
+
"macro_f1": 0.888
|
| 21 |
+
},
|
| 22 |
+
"field_stats": {
|
| 23 |
+
"currency": {
|
| 24 |
+
"field": "currency",
|
| 25 |
+
"field_type": "exact",
|
| 26 |
+
"tp": 5,
|
| 27 |
+
"fp": 0,
|
| 28 |
+
"fn": 0,
|
| 29 |
+
"tn": 0,
|
| 30 |
+
"support": 5,
|
| 31 |
+
"precision": 1.0,
|
| 32 |
+
"recall": 1.0,
|
| 33 |
+
"f1": 1.0
|
| 34 |
+
},
|
| 35 |
+
"line_items[0].description": {
|
| 36 |
+
"field": "line_items[0].description",
|
| 37 |
+
"field_type": "text",
|
| 38 |
+
"tp": 5,
|
| 39 |
+
"fp": 0,
|
| 40 |
+
"fn": 0,
|
| 41 |
+
"tn": 0,
|
| 42 |
+
"support": 5,
|
| 43 |
+
"precision": 1.0,
|
| 44 |
+
"recall": 1.0,
|
| 45 |
+
"f1": 1.0
|
| 46 |
+
},
|
| 47 |
+
"line_items[0].quantity": {
|
| 48 |
+
"field": "line_items[0].quantity",
|
| 49 |
+
"field_type": "number",
|
| 50 |
+
"tp": 5,
|
| 51 |
+
"fp": 0,
|
| 52 |
+
"fn": 0,
|
| 53 |
+
"tn": 0,
|
| 54 |
+
"support": 5,
|
| 55 |
+
"precision": 1.0,
|
| 56 |
+
"recall": 1.0,
|
| 57 |
+
"f1": 1.0
|
| 58 |
+
},
|
| 59 |
+
"line_items[0].total": {
|
| 60 |
+
"field": "line_items[0].total",
|
| 61 |
+
"field_type": "money",
|
| 62 |
+
"tp": 4,
|
| 63 |
+
"fp": 0,
|
| 64 |
+
"fn": 1,
|
| 65 |
+
"tn": 0,
|
| 66 |
+
"support": 5,
|
| 67 |
+
"precision": 1.0,
|
| 68 |
+
"recall": 0.8,
|
| 69 |
+
"f1": 0.8889
|
| 70 |
+
},
|
| 71 |
+
"line_items[0].unit_price": {
|
| 72 |
+
"field": "line_items[0].unit_price",
|
| 73 |
+
"field_type": "money",
|
| 74 |
+
"tp": 3,
|
| 75 |
+
"fp": 1,
|
| 76 |
+
"fn": 2,
|
| 77 |
+
"tn": 0,
|
| 78 |
+
"support": 5,
|
| 79 |
+
"precision": 0.75,
|
| 80 |
+
"recall": 0.6,
|
| 81 |
+
"f1": 0.6667
|
| 82 |
+
},
|
| 83 |
+
"line_items[1].description": {
|
| 84 |
+
"field": "line_items[1].description",
|
| 85 |
+
"field_type": "text",
|
| 86 |
+
"tp": 4,
|
| 87 |
+
"fp": 0,
|
| 88 |
+
"fn": 0,
|
| 89 |
+
"tn": 0,
|
| 90 |
+
"support": 4,
|
| 91 |
+
"precision": 1.0,
|
| 92 |
+
"recall": 1.0,
|
| 93 |
+
"f1": 1.0
|
| 94 |
+
},
|
| 95 |
+
"line_items[1].quantity": {
|
| 96 |
+
"field": "line_items[1].quantity",
|
| 97 |
+
"field_type": "number",
|
| 98 |
+
"tp": 4,
|
| 99 |
+
"fp": 0,
|
| 100 |
+
"fn": 0,
|
| 101 |
+
"tn": 0,
|
| 102 |
+
"support": 4,
|
| 103 |
+
"precision": 1.0,
|
| 104 |
+
"recall": 1.0,
|
| 105 |
+
"f1": 1.0
|
| 106 |
+
},
|
| 107 |
+
"line_items[1].total": {
|
| 108 |
+
"field": "line_items[1].total",
|
| 109 |
+
"field_type": "money",
|
| 110 |
+
"tp": 3,
|
| 111 |
+
"fp": 0,
|
| 112 |
+
"fn": 1,
|
| 113 |
+
"tn": 0,
|
| 114 |
+
"support": 4,
|
| 115 |
+
"precision": 1.0,
|
| 116 |
+
"recall": 0.75,
|
| 117 |
+
"f1": 0.8571
|
| 118 |
+
},
|
| 119 |
+
"line_items[1].unit_price": {
|
| 120 |
+
"field": "line_items[1].unit_price",
|
| 121 |
+
"field_type": "money",
|
| 122 |
+
"tp": 2,
|
| 123 |
+
"fp": 1,
|
| 124 |
+
"fn": 2,
|
| 125 |
+
"tn": 0,
|
| 126 |
+
"support": 4,
|
| 127 |
+
"precision": 0.6667,
|
| 128 |
+
"recall": 0.5,
|
| 129 |
+
"f1": 0.5714
|
| 130 |
+
},
|
| 131 |
+
"line_items[]": {
|
| 132 |
+
"field": "line_items[]",
|
| 133 |
+
"field_type": "number",
|
| 134 |
+
"tp": 5,
|
| 135 |
+
"fp": 0,
|
| 136 |
+
"fn": 0,
|
| 137 |
+
"tn": 0,
|
| 138 |
+
"support": 5,
|
| 139 |
+
"precision": 1.0,
|
| 140 |
+
"recall": 1.0,
|
| 141 |
+
"f1": 1.0
|
| 142 |
+
},
|
| 143 |
+
"merchant": {
|
| 144 |
+
"field": "merchant",
|
| 145 |
+
"field_type": "text",
|
| 146 |
+
"tp": 5,
|
| 147 |
+
"fp": 0,
|
| 148 |
+
"fn": 0,
|
| 149 |
+
"tn": 0,
|
| 150 |
+
"support": 5,
|
| 151 |
+
"precision": 1.0,
|
| 152 |
+
"recall": 1.0,
|
| 153 |
+
"f1": 1.0
|
| 154 |
+
},
|
| 155 |
+
"merchant_phone": {
|
| 156 |
+
"field": "merchant_phone",
|
| 157 |
+
"field_type": "exact",
|
| 158 |
+
"tp": 0,
|
| 159 |
+
"fp": 0,
|
| 160 |
+
"fn": 0,
|
| 161 |
+
"tn": 5,
|
| 162 |
+
"support": 0,
|
| 163 |
+
"precision": 0.0,
|
| 164 |
+
"recall": 0.0,
|
| 165 |
+
"f1": 0.0
|
| 166 |
+
},
|
| 167 |
+
"payment_method": {
|
| 168 |
+
"field": "payment_method",
|
| 169 |
+
"field_type": "exact",
|
| 170 |
+
"tp": 0,
|
| 171 |
+
"fp": 0,
|
| 172 |
+
"fn": 0,
|
| 173 |
+
"tn": 5,
|
| 174 |
+
"support": 0,
|
| 175 |
+
"precision": 0.0,
|
| 176 |
+
"recall": 0.0,
|
| 177 |
+
"f1": 0.0
|
| 178 |
+
},
|
| 179 |
+
"receipt_number": {
|
| 180 |
+
"field": "receipt_number",
|
| 181 |
+
"field_type": "exact",
|
| 182 |
+
"tp": 0,
|
| 183 |
+
"fp": 0,
|
| 184 |
+
"fn": 0,
|
| 185 |
+
"tn": 5,
|
| 186 |
+
"support": 0,
|
| 187 |
+
"precision": 0.0,
|
| 188 |
+
"recall": 0.0,
|
| 189 |
+
"f1": 0.0
|
| 190 |
+
},
|
| 191 |
+
"subtotal": {
|
| 192 |
+
"field": "subtotal",
|
| 193 |
+
"field_type": "money",
|
| 194 |
+
"tp": 5,
|
| 195 |
+
"fp": 0,
|
| 196 |
+
"fn": 0,
|
| 197 |
+
"tn": 0,
|
| 198 |
+
"support": 5,
|
| 199 |
+
"precision": 1.0,
|
| 200 |
+
"recall": 1.0,
|
| 201 |
+
"f1": 1.0
|
| 202 |
+
},
|
| 203 |
+
"tax": {
|
| 204 |
+
"field": "tax",
|
| 205 |
+
"field_type": "money",
|
| 206 |
+
"tp": 5,
|
| 207 |
+
"fp": 0,
|
| 208 |
+
"fn": 0,
|
| 209 |
+
"tn": 0,
|
| 210 |
+
"support": 5,
|
| 211 |
+
"precision": 1.0,
|
| 212 |
+
"recall": 1.0,
|
| 213 |
+
"f1": 1.0
|
| 214 |
+
},
|
| 215 |
+
"tip": {
|
| 216 |
+
"field": "tip",
|
| 217 |
+
"field_type": "money",
|
| 218 |
+
"tp": 0,
|
| 219 |
+
"fp": 0,
|
| 220 |
+
"fn": 0,
|
| 221 |
+
"tn": 5,
|
| 222 |
+
"support": 0,
|
| 223 |
+
"precision": 0.0,
|
| 224 |
+
"recall": 0.0,
|
| 225 |
+
"f1": 0.0
|
| 226 |
+
},
|
| 227 |
+
"total": {
|
| 228 |
+
"field": "total",
|
| 229 |
+
"field_type": "money",
|
| 230 |
+
"tp": 5,
|
| 231 |
+
"fp": 0,
|
| 232 |
+
"fn": 0,
|
| 233 |
+
"tn": 0,
|
| 234 |
+
"support": 5,
|
| 235 |
+
"precision": 1.0,
|
| 236 |
+
"recall": 1.0,
|
| 237 |
+
"f1": 1.0
|
| 238 |
+
},
|
| 239 |
+
"transaction_date": {
|
| 240 |
+
"field": "transaction_date",
|
| 241 |
+
"field_type": "date",
|
| 242 |
+
"tp": 0,
|
| 243 |
+
"fp": 0,
|
| 244 |
+
"fn": 0,
|
| 245 |
+
"tn": 5,
|
| 246 |
+
"support": 0,
|
| 247 |
+
"precision": 0.0,
|
| 248 |
+
"recall": 0.0,
|
| 249 |
+
"f1": 0.0
|
| 250 |
+
},
|
| 251 |
+
"transaction_time": {
|
| 252 |
+
"field": "transaction_time",
|
| 253 |
+
"field_type": "time",
|
| 254 |
+
"tp": 0,
|
| 255 |
+
"fp": 0,
|
| 256 |
+
"fn": 0,
|
| 257 |
+
"tn": 5,
|
| 258 |
+
"support": 0,
|
| 259 |
+
"precision": 0.0,
|
| 260 |
+
"recall": 0.0,
|
| 261 |
+
"f1": 0.0
|
| 262 |
+
},
|
| 263 |
+
"line_items[2].description": {
|
| 264 |
+
"field": "line_items[2].description",
|
| 265 |
+
"field_type": "text",
|
| 266 |
+
"tp": 1,
|
| 267 |
+
"fp": 0,
|
| 268 |
+
"fn": 0,
|
| 269 |
+
"tn": 0,
|
| 270 |
+
"support": 1,
|
| 271 |
+
"precision": 1.0,
|
| 272 |
+
"recall": 1.0,
|
| 273 |
+
"f1": 1.0
|
| 274 |
+
},
|
| 275 |
+
"line_items[2].quantity": {
|
| 276 |
+
"field": "line_items[2].quantity",
|
| 277 |
+
"field_type": "number",
|
| 278 |
+
"tp": 1,
|
| 279 |
+
"fp": 0,
|
| 280 |
+
"fn": 0,
|
| 281 |
+
"tn": 0,
|
| 282 |
+
"support": 1,
|
| 283 |
+
"precision": 1.0,
|
| 284 |
+
"recall": 1.0,
|
| 285 |
+
"f1": 1.0
|
| 286 |
+
},
|
| 287 |
+
"line_items[2].total": {
|
| 288 |
+
"field": "line_items[2].total",
|
| 289 |
+
"field_type": "money",
|
| 290 |
+
"tp": 1,
|
| 291 |
+
"fp": 0,
|
| 292 |
+
"fn": 0,
|
| 293 |
+
"tn": 0,
|
| 294 |
+
"support": 1,
|
| 295 |
+
"precision": 1.0,
|
| 296 |
+
"recall": 1.0,
|
| 297 |
+
"f1": 1.0
|
| 298 |
+
},
|
| 299 |
+
"line_items[2].unit_price": {
|
| 300 |
+
"field": "line_items[2].unit_price",
|
| 301 |
+
"field_type": "money",
|
| 302 |
+
"tp": 0,
|
| 303 |
+
"fp": 0,
|
| 304 |
+
"fn": 1,
|
| 305 |
+
"tn": 0,
|
| 306 |
+
"support": 1,
|
| 307 |
+
"precision": 0.0,
|
| 308 |
+
"recall": 0.0,
|
| 309 |
+
"f1": 0.0
|
| 310 |
+
}
|
| 311 |
+
}
|
| 312 |
+
}
|
evaluation/benchmarks/20260705T064740Z/gpt-5-mini_minimal_cord/receipt_gpt-5-mini_re-minimal_summary.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Evaluation Report β `receipt` on `gpt-5-mini_re-minimal`
|
| 2 |
+
|
| 3 |
+
_Generated: 2026-07-05T06:49:41+00:00_
|
| 4 |
+
|
| 5 |
+
## Headline
|
| 6 |
+
|
| 7 |
+
| Metric | Value |
|
| 8 |
+
|---|---|
|
| 9 |
+
| Documents evaluated | 5 |
|
| 10 |
+
| Extractor errors | 0 |
|
| 11 |
+
| **Micro F1** | **0.9333** |
|
| 12 |
+
| **Macro F1** | **0.8880** |
|
| 13 |
+
| Doc exact-match rate| 60.00% |
|
| 14 |
+
| Mean latency | 6677 ms |
|
| 15 |
+
| Mean cost / doc | $0.013542 |
|
| 16 |
+
| Total cost | $0.0677 |
|
| 17 |
+
| Wall time | 33.39 s |
|
| 18 |
+
|
| 19 |
+
## Per-field performance
|
| 20 |
+
|
| 21 |
+
| Field | Type | Support | Precision | Recall | F1 |
|
| 22 |
+
|---|---|---:|---:|---:|---:|
|
| 23 |
+
| `currency` | exact | 5 | 1.000 | 1.000 | 1.000 |
|
| 24 |
+
| `line_items[0].description` | text | 5 | 1.000 | 1.000 | 1.000 |
|
| 25 |
+
| `line_items[0].quantity` | number | 5 | 1.000 | 1.000 | 1.000 |
|
| 26 |
+
| `line_items[]` | number | 5 | 1.000 | 1.000 | 1.000 |
|
| 27 |
+
| `merchant` | text | 5 | 1.000 | 1.000 | 1.000 |
|
| 28 |
+
| `subtotal` | money | 5 | 1.000 | 1.000 | 1.000 |
|
| 29 |
+
| `tax` | money | 5 | 1.000 | 1.000 | 1.000 |
|
| 30 |
+
| `total` | money | 5 | 1.000 | 1.000 | 1.000 |
|
| 31 |
+
| `line_items[0].total` | money | 5 | 1.000 | 0.800 | 0.889 |
|
| 32 |
+
| `line_items[0].unit_price` | money | 5 | 0.750 | 0.600 | 0.667 |
|
| 33 |
+
| `line_items[1].description` | text | 4 | 1.000 | 1.000 | 1.000 |
|
| 34 |
+
| `line_items[1].quantity` | number | 4 | 1.000 | 1.000 | 1.000 |
|
| 35 |
+
| `line_items[1].total` | money | 4 | 1.000 | 0.750 | 0.857 |
|
| 36 |
+
| `line_items[1].unit_price` | money | 4 | 0.667 | 0.500 | 0.571 |
|
| 37 |
+
| `line_items[2].description` | text | 1 | 1.000 | 1.000 | 1.000 |
|
| 38 |
+
| `line_items[2].quantity` | number | 1 | 1.000 | 1.000 | 1.000 |
|
| 39 |
+
| `line_items[2].total` | money | 1 | 1.000 | 1.000 | 1.000 |
|
| 40 |
+
| `line_items[2].unit_price` | money | 1 | 0.000 | 0.000 | 0.000 |
|
evaluation/benchmarks/20260705T064740Z/gpt-5-mini_minimal_sroie/receipt_gpt-5-mini_re-minimal_per_record.csv
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
doc_id,field,field_type,predicted,truth,outcome,score,latency_ms,cost_usd
|
| 2 |
+
sroie_sample_001,currency,exact,SGD,SGD,TP,1.0,7493.9,0.01319
|
| 3 |
+
sroie_sample_001,line_items[],number,0,0,TP,1.0,7493.9,0.01319
|
| 4 |
+
sroie_sample_001,merchant,text,TAN WOON YANN,TAN WOON YANN,TP,1.0,7493.9,0.01319
|
| 5 |
+
sroie_sample_001,merchant_address.city,text,JOHOR BAHRU,,FP,0.0,7493.9,0.01319
|
| 6 |
+
sroie_sample_001,merchant_address.line1,text,"789 KING STREET, TAMAN DAYA","789 KING STREET, TAMAN DAYA, 81100 JOHOR BAHRU",TP,0.898,7493.9,0.01319
|
| 7 |
+
sroie_sample_001,merchant_address.postal_code,exact,81100,,FP,0.0,7493.9,0.01319
|
| 8 |
+
sroie_sample_001,total,money,72,72,TP,1.0,7493.9,0.01319
|
| 9 |
+
sroie_sample_001,transaction_date,date,2018-06-25,2018-06-25,TP,1.0,7493.9,0.01319
|
| 10 |
+
sroie_sample_002,currency,exact,SGD,SGD,TP,1.0,5550.8,0.011973
|
| 11 |
+
sroie_sample_002,line_items[],number,0,0,TP,1.0,5550.8,0.011973
|
| 12 |
+
sroie_sample_002,merchant,text,SANYU STATIONERY SHOP,SANYU STATIONERY SHOP,TP,1.0,5550.8,0.011973
|
| 13 |
+
sroie_sample_002,merchant_address.city,text,SHAH ALAM,,FP,0.0,5550.8,0.011973
|
| 14 |
+
sroie_sample_002,merchant_address.country,exact,MY,,FP,0.0,5550.8,0.011973
|
| 15 |
+
sroie_sample_002,merchant_address.line1,text,"NO. 31G&33G, JALAN SETIA INDAH X, U13/X","NO. 31G&33G, JALAN SETIA INDAH X, U13/X 40170 SHAH ALAM",TP,1.0,5550.8,0.011973
|
| 16 |
+
sroie_sample_002,merchant_address.postal_code,exact,40170,,FP,0.0,5550.8,0.011973
|
| 17 |
+
sroie_sample_002,total,money,16.3,16.3,TP,1.0,5550.8,0.011973
|
| 18 |
+
sroie_sample_002,transaction_date,date,2018-02-19,2018-02-19,TP,1.0,5550.8,0.011973
|
| 19 |
+
sroie_sample_003,currency,exact,SGD,SGD,TP,1.0,5937.9,0.01279
|
| 20 |
+
sroie_sample_003,line_items[],number,0,0,TP,1.0,5937.9,0.01279
|
| 21 |
+
sroie_sample_003,merchant,text,KEDAI PAPAN YEW CHUAN,KEDAI PAPAN YEW CHUAN,TP,1.0,5937.9,0.01279
|
| 22 |
+
sroie_sample_003,merchant_address.city,text,DENGKIL,,FP,0.0,5937.9,0.01279
|
| 23 |
+
sroie_sample_003,merchant_address.country,exact,MY,,FP,0.0,5937.9,0.01279
|
| 24 |
+
sroie_sample_003,merchant_address.line1,text,LOT 276 JALAN BANTING,"LOT 276 JALAN BANTING, 43800 DENGKIL, SELANGOR",MISMATCH,0.765,5937.9,0.01279
|
| 25 |
+
sroie_sample_003,merchant_address.postal_code,exact,43800,,FP,0.0,5937.9,0.01279
|
| 26 |
+
sroie_sample_003,merchant_address.region,text,SELANGOR,,FP,0.0,5937.9,0.01279
|
| 27 |
+
sroie_sample_003,total,money,110,110,TP,1.0,5937.9,0.01279
|
| 28 |
+
sroie_sample_003,transaction_date,date,2018-05-10,2018-05-10,TP,1.0,5937.9,0.01279
|
| 29 |
+
sroie_sample_004,currency,exact,SGD,SGD,TP,1.0,5446.5,0.01243
|
| 30 |
+
sroie_sample_004,line_items[],number,0,0,TP,1.0,5446.5,0.01243
|
| 31 |
+
sroie_sample_004,merchant,text,OJC MARKETING SDN BHD,OJC MARKETING SDN BHD,TP,1.0,5446.5,0.01243
|
| 32 |
+
sroie_sample_004,merchant_address.city,text,MASAI,,FP,0.0,5446.5,0.01243
|
| 33 |
+
sroie_sample_004,merchant_address.country,exact,MY,,FP,0.0,5446.5,0.01243
|
| 34 |
+
sroie_sample_004,merchant_address.line1,text,"NO 2 & 4, JALAN BAYU 4","NO 2 & 4, JALAN BAYU 4, BANDAR SERI ALAM, 81750 MASAI",TP,0.952,5446.5,0.01243
|
| 35 |
+
sroie_sample_004,merchant_address.line2,text,BANDAR SERI ALAM,,FP,0.0,5446.5,0.01243
|
| 36 |
+
sroie_sample_004,merchant_address.postal_code,exact,81750,,FP,0.0,5446.5,0.01243
|
| 37 |
+
sroie_sample_004,total,money,48.15,48.15,TP,1.0,5446.5,0.01243
|
| 38 |
+
sroie_sample_004,transaction_date,date,2018-04-17,2018-04-17,TP,1.0,5446.5,0.01243
|
| 39 |
+
sroie_sample_005,currency,exact,SGD,SGD,TP,1.0,3337.9,0.008842
|
| 40 |
+
sroie_sample_005,line_items[],number,0,0,TP,1.0,3337.9,0.008842
|
| 41 |
+
sroie_sample_005,merchant,text,AEON CO. (M) BHD,AEON CO. (M) BHD,TP,1.0,3337.9,0.008842
|
| 42 |
+
sroie_sample_005,merchant_address.line1,text,"3RD FLR, AEON TAMAN MALURI SHOPPING CENTRE","3RD FLR, AEON TAMAN MALURI SHOPPING CENTRE",TP,1.0,3337.9,0.008842
|
| 43 |
+
sroie_sample_005,total,money,39.2,39.2,TP,1.0,3337.9,0.008842
|
| 44 |
+
sroie_sample_005,transaction_date,date,2018-11-30,2018-11-30,TP,1.0,3337.9,0.008842
|
evaluation/benchmarks/20260705T064740Z/gpt-5-mini_minimal_sroie/receipt_gpt-5-mini_re-minimal_summary.json
ADDED
|
@@ -0,0 +1,240 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"generated_at": "2026-07-05T06:49:06.034616+00:00",
|
| 3 |
+
"summary": {
|
| 4 |
+
"model": "gpt-5-mini_re-minimal",
|
| 5 |
+
"doc_type": "receipt",
|
| 6 |
+
"n_docs": 5,
|
| 7 |
+
"errors": 0,
|
| 8 |
+
"micro_f1": 0.7945,
|
| 9 |
+
"macro_f1": 0.9667,
|
| 10 |
+
"doc_exact_match": 0.2,
|
| 11 |
+
"mean_latency_ms": 5553.4,
|
| 12 |
+
"mean_cost_usd": 0.011845,
|
| 13 |
+
"total_cost_usd": 0.0592,
|
| 14 |
+
"wall_time_s": 27.77
|
| 15 |
+
},
|
| 16 |
+
"aggregate": {
|
| 17 |
+
"micro_precision": 0.6744,
|
| 18 |
+
"micro_recall": 0.9667,
|
| 19 |
+
"micro_f1": 0.7945,
|
| 20 |
+
"macro_f1": 0.9667
|
| 21 |
+
},
|
| 22 |
+
"field_stats": {
|
| 23 |
+
"currency": {
|
| 24 |
+
"field": "currency",
|
| 25 |
+
"field_type": "exact",
|
| 26 |
+
"tp": 5,
|
| 27 |
+
"fp": 0,
|
| 28 |
+
"fn": 0,
|
| 29 |
+
"tn": 0,
|
| 30 |
+
"support": 5,
|
| 31 |
+
"precision": 1.0,
|
| 32 |
+
"recall": 1.0,
|
| 33 |
+
"f1": 1.0
|
| 34 |
+
},
|
| 35 |
+
"line_items[]": {
|
| 36 |
+
"field": "line_items[]",
|
| 37 |
+
"field_type": "number",
|
| 38 |
+
"tp": 5,
|
| 39 |
+
"fp": 0,
|
| 40 |
+
"fn": 0,
|
| 41 |
+
"tn": 0,
|
| 42 |
+
"support": 5,
|
| 43 |
+
"precision": 1.0,
|
| 44 |
+
"recall": 1.0,
|
| 45 |
+
"f1": 1.0
|
| 46 |
+
},
|
| 47 |
+
"merchant": {
|
| 48 |
+
"field": "merchant",
|
| 49 |
+
"field_type": "text",
|
| 50 |
+
"tp": 5,
|
| 51 |
+
"fp": 0,
|
| 52 |
+
"fn": 0,
|
| 53 |
+
"tn": 0,
|
| 54 |
+
"support": 5,
|
| 55 |
+
"precision": 1.0,
|
| 56 |
+
"recall": 1.0,
|
| 57 |
+
"f1": 1.0
|
| 58 |
+
},
|
| 59 |
+
"merchant_address.city": {
|
| 60 |
+
"field": "merchant_address.city",
|
| 61 |
+
"field_type": "text",
|
| 62 |
+
"tp": 0,
|
| 63 |
+
"fp": 4,
|
| 64 |
+
"fn": 0,
|
| 65 |
+
"tn": 1,
|
| 66 |
+
"support": 0,
|
| 67 |
+
"precision": 0.0,
|
| 68 |
+
"recall": 0.0,
|
| 69 |
+
"f1": 0.0
|
| 70 |
+
},
|
| 71 |
+
"merchant_address.country": {
|
| 72 |
+
"field": "merchant_address.country",
|
| 73 |
+
"field_type": "exact",
|
| 74 |
+
"tp": 0,
|
| 75 |
+
"fp": 3,
|
| 76 |
+
"fn": 0,
|
| 77 |
+
"tn": 2,
|
| 78 |
+
"support": 0,
|
| 79 |
+
"precision": 0.0,
|
| 80 |
+
"recall": 0.0,
|
| 81 |
+
"f1": 0.0
|
| 82 |
+
},
|
| 83 |
+
"merchant_address.line1": {
|
| 84 |
+
"field": "merchant_address.line1",
|
| 85 |
+
"field_type": "text",
|
| 86 |
+
"tp": 4,
|
| 87 |
+
"fp": 1,
|
| 88 |
+
"fn": 1,
|
| 89 |
+
"tn": 0,
|
| 90 |
+
"support": 5,
|
| 91 |
+
"precision": 0.8,
|
| 92 |
+
"recall": 0.8,
|
| 93 |
+
"f1": 0.8
|
| 94 |
+
},
|
| 95 |
+
"merchant_address.line2": {
|
| 96 |
+
"field": "merchant_address.line2",
|
| 97 |
+
"field_type": "text",
|
| 98 |
+
"tp": 0,
|
| 99 |
+
"fp": 1,
|
| 100 |
+
"fn": 0,
|
| 101 |
+
"tn": 4,
|
| 102 |
+
"support": 0,
|
| 103 |
+
"precision": 0.0,
|
| 104 |
+
"recall": 0.0,
|
| 105 |
+
"f1": 0.0
|
| 106 |
+
},
|
| 107 |
+
"merchant_address.postal_code": {
|
| 108 |
+
"field": "merchant_address.postal_code",
|
| 109 |
+
"field_type": "exact",
|
| 110 |
+
"tp": 0,
|
| 111 |
+
"fp": 4,
|
| 112 |
+
"fn": 0,
|
| 113 |
+
"tn": 1,
|
| 114 |
+
"support": 0,
|
| 115 |
+
"precision": 0.0,
|
| 116 |
+
"recall": 0.0,
|
| 117 |
+
"f1": 0.0
|
| 118 |
+
},
|
| 119 |
+
"merchant_address.region": {
|
| 120 |
+
"field": "merchant_address.region",
|
| 121 |
+
"field_type": "text",
|
| 122 |
+
"tp": 0,
|
| 123 |
+
"fp": 1,
|
| 124 |
+
"fn": 0,
|
| 125 |
+
"tn": 4,
|
| 126 |
+
"support": 0,
|
| 127 |
+
"precision": 0.0,
|
| 128 |
+
"recall": 0.0,
|
| 129 |
+
"f1": 0.0
|
| 130 |
+
},
|
| 131 |
+
"merchant_phone": {
|
| 132 |
+
"field": "merchant_phone",
|
| 133 |
+
"field_type": "exact",
|
| 134 |
+
"tp": 0,
|
| 135 |
+
"fp": 0,
|
| 136 |
+
"fn": 0,
|
| 137 |
+
"tn": 5,
|
| 138 |
+
"support": 0,
|
| 139 |
+
"precision": 0.0,
|
| 140 |
+
"recall": 0.0,
|
| 141 |
+
"f1": 0.0
|
| 142 |
+
},
|
| 143 |
+
"payment_method": {
|
| 144 |
+
"field": "payment_method",
|
| 145 |
+
"field_type": "exact",
|
| 146 |
+
"tp": 0,
|
| 147 |
+
"fp": 0,
|
| 148 |
+
"fn": 0,
|
| 149 |
+
"tn": 5,
|
| 150 |
+
"support": 0,
|
| 151 |
+
"precision": 0.0,
|
| 152 |
+
"recall": 0.0,
|
| 153 |
+
"f1": 0.0
|
| 154 |
+
},
|
| 155 |
+
"receipt_number": {
|
| 156 |
+
"field": "receipt_number",
|
| 157 |
+
"field_type": "exact",
|
| 158 |
+
"tp": 0,
|
| 159 |
+
"fp": 0,
|
| 160 |
+
"fn": 0,
|
| 161 |
+
"tn": 5,
|
| 162 |
+
"support": 0,
|
| 163 |
+
"precision": 0.0,
|
| 164 |
+
"recall": 0.0,
|
| 165 |
+
"f1": 0.0
|
| 166 |
+
},
|
| 167 |
+
"subtotal": {
|
| 168 |
+
"field": "subtotal",
|
| 169 |
+
"field_type": "money",
|
| 170 |
+
"tp": 0,
|
| 171 |
+
"fp": 0,
|
| 172 |
+
"fn": 0,
|
| 173 |
+
"tn": 5,
|
| 174 |
+
"support": 0,
|
| 175 |
+
"precision": 0.0,
|
| 176 |
+
"recall": 0.0,
|
| 177 |
+
"f1": 0.0
|
| 178 |
+
},
|
| 179 |
+
"tax": {
|
| 180 |
+
"field": "tax",
|
| 181 |
+
"field_type": "money",
|
| 182 |
+
"tp": 0,
|
| 183 |
+
"fp": 0,
|
| 184 |
+
"fn": 0,
|
| 185 |
+
"tn": 5,
|
| 186 |
+
"support": 0,
|
| 187 |
+
"precision": 0.0,
|
| 188 |
+
"recall": 0.0,
|
| 189 |
+
"f1": 0.0
|
| 190 |
+
},
|
| 191 |
+
"tip": {
|
| 192 |
+
"field": "tip",
|
| 193 |
+
"field_type": "money",
|
| 194 |
+
"tp": 0,
|
| 195 |
+
"fp": 0,
|
| 196 |
+
"fn": 0,
|
| 197 |
+
"tn": 5,
|
| 198 |
+
"support": 0,
|
| 199 |
+
"precision": 0.0,
|
| 200 |
+
"recall": 0.0,
|
| 201 |
+
"f1": 0.0
|
| 202 |
+
},
|
| 203 |
+
"total": {
|
| 204 |
+
"field": "total",
|
| 205 |
+
"field_type": "money",
|
| 206 |
+
"tp": 5,
|
| 207 |
+
"fp": 0,
|
| 208 |
+
"fn": 0,
|
| 209 |
+
"tn": 0,
|
| 210 |
+
"support": 5,
|
| 211 |
+
"precision": 1.0,
|
| 212 |
+
"recall": 1.0,
|
| 213 |
+
"f1": 1.0
|
| 214 |
+
},
|
| 215 |
+
"transaction_date": {
|
| 216 |
+
"field": "transaction_date",
|
| 217 |
+
"field_type": "date",
|
| 218 |
+
"tp": 5,
|
| 219 |
+
"fp": 0,
|
| 220 |
+
"fn": 0,
|
| 221 |
+
"tn": 0,
|
| 222 |
+
"support": 5,
|
| 223 |
+
"precision": 1.0,
|
| 224 |
+
"recall": 1.0,
|
| 225 |
+
"f1": 1.0
|
| 226 |
+
},
|
| 227 |
+
"transaction_time": {
|
| 228 |
+
"field": "transaction_time",
|
| 229 |
+
"field_type": "time",
|
| 230 |
+
"tp": 0,
|
| 231 |
+
"fp": 0,
|
| 232 |
+
"fn": 0,
|
| 233 |
+
"tn": 5,
|
| 234 |
+
"support": 0,
|
| 235 |
+
"precision": 0.0,
|
| 236 |
+
"recall": 0.0,
|
| 237 |
+
"f1": 0.0
|
| 238 |
+
}
|
| 239 |
+
}
|
| 240 |
+
}
|
evaluation/benchmarks/20260705T064740Z/gpt-5-mini_minimal_sroie/receipt_gpt-5-mini_re-minimal_summary.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Evaluation Report β `receipt` on `gpt-5-mini_re-minimal`
|
| 2 |
+
|
| 3 |
+
_Generated: 2026-07-05T06:49:06+00:00_
|
| 4 |
+
|
| 5 |
+
## Headline
|
| 6 |
+
|
| 7 |
+
| Metric | Value |
|
| 8 |
+
|---|---|
|
| 9 |
+
| Documents evaluated | 5 |
|
| 10 |
+
| Extractor errors | 0 |
|
| 11 |
+
| **Micro F1** | **0.7945** |
|
| 12 |
+
| **Macro F1** | **0.9667** |
|
| 13 |
+
| Doc exact-match rate| 20.00% |
|
| 14 |
+
| Mean latency | 5553 ms |
|
| 15 |
+
| Mean cost / doc | $0.011845 |
|
| 16 |
+
| Total cost | $0.0592 |
|
| 17 |
+
| Wall time | 27.77 s |
|
| 18 |
+
|
| 19 |
+
## Per-field performance
|
| 20 |
+
|
| 21 |
+
| Field | Type | Support | Precision | Recall | F1 |
|
| 22 |
+
|---|---|---:|---:|---:|---:|
|
| 23 |
+
| `currency` | exact | 5 | 1.000 | 1.000 | 1.000 |
|
| 24 |
+
| `line_items[]` | number | 5 | 1.000 | 1.000 | 1.000 |
|
| 25 |
+
| `merchant` | text | 5 | 1.000 | 1.000 | 1.000 |
|
| 26 |
+
| `total` | money | 5 | 1.000 | 1.000 | 1.000 |
|
| 27 |
+
| `transaction_date` | date | 5 | 1.000 | 1.000 | 1.000 |
|
| 28 |
+
| `merchant_address.line1` | text | 5 | 0.800 | 0.800 | 0.800 |
|
| 29 |
+
| `merchant_address.city` | text | 0 | 0.000 | 0.000 | 0.000 |
|
| 30 |
+
| `merchant_address.country` | exact | 0 | 0.000 | 0.000 | 0.000 |
|
| 31 |
+
| `merchant_address.line2` | text | 0 | 0.000 | 0.000 | 0.000 |
|
| 32 |
+
| `merchant_address.postal_code` | exact | 0 | 0.000 | 0.000 | 0.000 |
|
| 33 |
+
| `merchant_address.region` | text | 0 | 0.000 | 0.000 | 0.000 |
|
evaluation/benchmarks/20260705T064740Z/gpt-5-nano_minimal_cord/receipt_gpt-5-nano_re-minimal_per_record.csv
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
doc_id,field,field_type,predicted,truth,outcome,score,latency_ms,cost_usd
|
| 2 |
+
cord_sample_001,currency,exact,KRW,KRW,TP,1.0,4681.8,0.010535
|
| 3 |
+
cord_sample_001,line_items[0].description,text,Iced Americano,Iced Americano,TP,1.0,4681.8,0.010535
|
| 4 |
+
cord_sample_001,line_items[0].quantity,number,1,1,TP,1.0,4681.8,0.010535
|
| 5 |
+
cord_sample_001,line_items[0].total,money,4500,4500,TP,1.0,4681.8,0.010535
|
| 6 |
+
cord_sample_001,line_items[0].unit_price,money,4500,4500,TP,1.0,4681.8,0.010535
|
| 7 |
+
cord_sample_001,line_items[1].description,text,Choco Chip Muffin,Choco Chip Muffin,TP,1.0,4681.8,0.010535
|
| 8 |
+
cord_sample_001,line_items[1].quantity,number,1,1,TP,1.0,4681.8,0.010535
|
| 9 |
+
cord_sample_001,line_items[1].total,money,3800,3800,TP,1.0,4681.8,0.010535
|
| 10 |
+
cord_sample_001,line_items[1].unit_price,money,3800,3800,TP,1.0,4681.8,0.010535
|
| 11 |
+
cord_sample_001,line_items[],number,2,2,TP,1.0,4681.8,0.010535
|
| 12 |
+
cord_sample_001,merchant,text,Unknown merchant,Unknown merchant,TP,1.0,4681.8,0.010535
|
| 13 |
+
cord_sample_001,subtotal,money,8300,8300,TP,1.0,4681.8,0.010535
|
| 14 |
+
cord_sample_001,tax,money,830,830,TP,1.0,4681.8,0.010535
|
| 15 |
+
cord_sample_001,total,money,9130,9130,TP,1.0,4681.8,0.010535
|
| 16 |
+
cord_sample_002,currency,exact,KRW,KRW,TP,1.0,3868.6,0.010943
|
| 17 |
+
cord_sample_002,line_items[0].description,text,Bibimbap Set,Bibimbap Set,TP,1.0,3868.6,0.010943
|
| 18 |
+
cord_sample_002,line_items[0].quantity,number,2,2,TP,1.0,3868.6,0.010943
|
| 19 |
+
cord_sample_002,line_items[0].total,money,48000,24000,MISMATCH,0.0,3868.6,0.010943
|
| 20 |
+
cord_sample_002,line_items[0].unit_price,money,24000,12000,MISMATCH,0.0,3868.6,0.010943
|
| 21 |
+
cord_sample_002,line_items[1].description,text,Miso Soup,Miso Soup,TP,1.0,3868.6,0.010943
|
| 22 |
+
cord_sample_002,line_items[1].quantity,number,2,2,TP,1.0,3868.6,0.010943
|
| 23 |
+
cord_sample_002,line_items[1].total,money,10000,5000,MISMATCH,0.0,3868.6,0.010943
|
| 24 |
+
cord_sample_002,line_items[1].unit_price,money,5000,2500,MISMATCH,0.0,3868.6,0.010943
|
| 25 |
+
cord_sample_002,line_items[],number,2,2,TP,1.0,3868.6,0.010943
|
| 26 |
+
cord_sample_002,merchant,text,Unknown merchant,Unknown merchant,TP,1.0,3868.6,0.010943
|
| 27 |
+
cord_sample_002,subtotal,money,29000,29000,TP,1.0,3868.6,0.010943
|
| 28 |
+
cord_sample_002,tax,money,2900,2900,TP,1.0,3868.6,0.010943
|
| 29 |
+
cord_sample_002,total,money,31900,31900,TP,1.0,3868.6,0.010943
|
| 30 |
+
cord_sample_003,currency,exact,KRW,KRW,TP,1.0,3646.5,0.010388
|
| 31 |
+
cord_sample_003,line_items[0].description,text,Latte,Latte,TP,1.0,3646.5,0.010388
|
| 32 |
+
cord_sample_003,line_items[0].quantity,number,1,1,TP,1.0,3646.5,0.010388
|
| 33 |
+
cord_sample_003,line_items[0].total,money,5000,5000,TP,1.0,3646.5,0.010388
|
| 34 |
+
cord_sample_003,line_items[0].unit_price,money,5000,5000,TP,1.0,3646.5,0.010388
|
| 35 |
+
cord_sample_003,line_items[],number,1,1,TP,1.0,3646.5,0.010388
|
| 36 |
+
cord_sample_003,merchant,text,Unknown merchant,Unknown merchant,TP,1.0,3646.5,0.010388
|
| 37 |
+
cord_sample_003,subtotal,money,5000,5000,TP,1.0,3646.5,0.010388
|
| 38 |
+
cord_sample_003,tax,money,500,500,TP,1.0,3646.5,0.010388
|
| 39 |
+
cord_sample_003,total,money,5500,5500,TP,1.0,3646.5,0.010388
|
| 40 |
+
cord_sample_004,currency,exact,KRW,KRW,TP,1.0,7969.6,0.015105
|
| 41 |
+
cord_sample_004,line_items[0].description,text,Kimchi Fried Rice,Kimchi Fried Rice,TP,1.0,7969.6,0.015105
|
| 42 |
+
cord_sample_004,line_items[0].quantity,number,1,1,TP,1.0,7969.6,0.015105
|
| 43 |
+
cord_sample_004,line_items[0].total,money,95,9500,MISMATCH,0.01,7969.6,0.015105
|
| 44 |
+
cord_sample_004,line_items[0].unit_price,money,95,9500,MISMATCH,0.01,7969.6,0.015105
|
| 45 |
+
cord_sample_004,line_items[1].description,text,Egg Roll,Egg Roll,TP,1.0,7969.6,0.015105
|
| 46 |
+
cord_sample_004,line_items[1].quantity,number,1,1,TP,1.0,7969.6,0.015105
|
| 47 |
+
cord_sample_004,line_items[1].total,money,3.5,3500,MISMATCH,0.001,7969.6,0.015105
|
| 48 |
+
cord_sample_004,line_items[1].unit_price,money,3.5,3500,MISMATCH,0.001,7969.6,0.015105
|
| 49 |
+
cord_sample_004,line_items[2].description,text,Soft Drink,Soft Drink,TP,1.0,7969.6,0.015105
|
| 50 |
+
cord_sample_004,line_items[2].quantity,number,2,2,TP,1.0,7969.6,0.015105
|
| 51 |
+
cord_sample_004,line_items[2].total,money,8,4000,MISMATCH,0.002,7969.6,0.015105
|
| 52 |
+
cord_sample_004,line_items[2].unit_price,money,4,2000,MISMATCH,0.002,7969.6,0.015105
|
| 53 |
+
cord_sample_004,line_items[],number,3,3,TP,1.0,7969.6,0.015105
|
| 54 |
+
cord_sample_004,merchant,text,Unknown merchant,Unknown merchant,TP,1.0,7969.6,0.015105
|
| 55 |
+
cord_sample_004,subtotal,money,17000,17000,TP,1.0,7969.6,0.015105
|
| 56 |
+
cord_sample_004,tax,money,1700,1700,TP,1.0,7969.6,0.015105
|
| 57 |
+
cord_sample_004,total,money,18700,18700,TP,1.0,7969.6,0.015105
|
| 58 |
+
cord_sample_005,currency,exact,KRW,KRW,TP,1.0,3988.3,0.01101
|
| 59 |
+
cord_sample_005,line_items[0].description,text,Espresso,Espresso,TP,1.0,3988.3,0.01101
|
| 60 |
+
cord_sample_005,line_items[0].quantity,number,1,1,TP,1.0,3988.3,0.01101
|
| 61 |
+
cord_sample_005,line_items[0].total,money,3500,3500,TP,1.0,3988.3,0.01101
|
| 62 |
+
cord_sample_005,line_items[0].unit_price,money,3500,3500,TP,1.0,3988.3,0.01101
|
| 63 |
+
cord_sample_005,line_items[1].description,text,Cheesecake Slice,Cheesecake Slice,TP,1.0,3988.3,0.01101
|
| 64 |
+
cord_sample_005,line_items[1].quantity,number,1,1,TP,1.0,3988.3,0.01101
|
| 65 |
+
cord_sample_005,line_items[1].total,money,6500,6500,TP,1.0,3988.3,0.01101
|
| 66 |
+
cord_sample_005,line_items[1].unit_price,money,6500,6500,TP,1.0,3988.3,0.01101
|
| 67 |
+
cord_sample_005,line_items[],number,2,2,TP,1.0,3988.3,0.01101
|
| 68 |
+
cord_sample_005,merchant,text,Unknown merchant,Unknown merchant,TP,1.0,3988.3,0.01101
|
| 69 |
+
cord_sample_005,subtotal,money,10000,10000,TP,1.0,3988.3,0.01101
|
| 70 |
+
cord_sample_005,tax,money,1000,1000,TP,1.0,3988.3,0.01101
|
| 71 |
+
cord_sample_005,total,money,11000,11000,TP,1.0,3988.3,0.01101
|
evaluation/benchmarks/20260705T064740Z/gpt-5-nano_minimal_cord/receipt_gpt-5-nano_re-minimal_summary.json
ADDED
|
@@ -0,0 +1,312 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"generated_at": "2026-07-05T06:48:36.320979+00:00",
|
| 3 |
+
"summary": {
|
| 4 |
+
"model": "gpt-5-nano_re-minimal",
|
| 5 |
+
"doc_type": "receipt",
|
| 6 |
+
"n_docs": 5,
|
| 7 |
+
"errors": 0,
|
| 8 |
+
"micro_f1": 0.8571,
|
| 9 |
+
"macro_f1": 0.7889,
|
| 10 |
+
"doc_exact_match": 0.6,
|
| 11 |
+
"mean_latency_ms": 4830.9,
|
| 12 |
+
"mean_cost_usd": 0.011596,
|
| 13 |
+
"total_cost_usd": 0.058,
|
| 14 |
+
"wall_time_s": 24.16
|
| 15 |
+
},
|
| 16 |
+
"aggregate": {
|
| 17 |
+
"micro_precision": 0.8571,
|
| 18 |
+
"micro_recall": 0.8571,
|
| 19 |
+
"micro_f1": 0.8571,
|
| 20 |
+
"macro_f1": 0.7889
|
| 21 |
+
},
|
| 22 |
+
"field_stats": {
|
| 23 |
+
"currency": {
|
| 24 |
+
"field": "currency",
|
| 25 |
+
"field_type": "exact",
|
| 26 |
+
"tp": 5,
|
| 27 |
+
"fp": 0,
|
| 28 |
+
"fn": 0,
|
| 29 |
+
"tn": 0,
|
| 30 |
+
"support": 5,
|
| 31 |
+
"precision": 1.0,
|
| 32 |
+
"recall": 1.0,
|
| 33 |
+
"f1": 1.0
|
| 34 |
+
},
|
| 35 |
+
"line_items[0].description": {
|
| 36 |
+
"field": "line_items[0].description",
|
| 37 |
+
"field_type": "text",
|
| 38 |
+
"tp": 5,
|
| 39 |
+
"fp": 0,
|
| 40 |
+
"fn": 0,
|
| 41 |
+
"tn": 0,
|
| 42 |
+
"support": 5,
|
| 43 |
+
"precision": 1.0,
|
| 44 |
+
"recall": 1.0,
|
| 45 |
+
"f1": 1.0
|
| 46 |
+
},
|
| 47 |
+
"line_items[0].quantity": {
|
| 48 |
+
"field": "line_items[0].quantity",
|
| 49 |
+
"field_type": "number",
|
| 50 |
+
"tp": 5,
|
| 51 |
+
"fp": 0,
|
| 52 |
+
"fn": 0,
|
| 53 |
+
"tn": 0,
|
| 54 |
+
"support": 5,
|
| 55 |
+
"precision": 1.0,
|
| 56 |
+
"recall": 1.0,
|
| 57 |
+
"f1": 1.0
|
| 58 |
+
},
|
| 59 |
+
"line_items[0].total": {
|
| 60 |
+
"field": "line_items[0].total",
|
| 61 |
+
"field_type": "money",
|
| 62 |
+
"tp": 3,
|
| 63 |
+
"fp": 2,
|
| 64 |
+
"fn": 2,
|
| 65 |
+
"tn": 0,
|
| 66 |
+
"support": 5,
|
| 67 |
+
"precision": 0.6,
|
| 68 |
+
"recall": 0.6,
|
| 69 |
+
"f1": 0.6
|
| 70 |
+
},
|
| 71 |
+
"line_items[0].unit_price": {
|
| 72 |
+
"field": "line_items[0].unit_price",
|
| 73 |
+
"field_type": "money",
|
| 74 |
+
"tp": 3,
|
| 75 |
+
"fp": 2,
|
| 76 |
+
"fn": 2,
|
| 77 |
+
"tn": 0,
|
| 78 |
+
"support": 5,
|
| 79 |
+
"precision": 0.6,
|
| 80 |
+
"recall": 0.6,
|
| 81 |
+
"f1": 0.6
|
| 82 |
+
},
|
| 83 |
+
"line_items[1].description": {
|
| 84 |
+
"field": "line_items[1].description",
|
| 85 |
+
"field_type": "text",
|
| 86 |
+
"tp": 4,
|
| 87 |
+
"fp": 0,
|
| 88 |
+
"fn": 0,
|
| 89 |
+
"tn": 0,
|
| 90 |
+
"support": 4,
|
| 91 |
+
"precision": 1.0,
|
| 92 |
+
"recall": 1.0,
|
| 93 |
+
"f1": 1.0
|
| 94 |
+
},
|
| 95 |
+
"line_items[1].quantity": {
|
| 96 |
+
"field": "line_items[1].quantity",
|
| 97 |
+
"field_type": "number",
|
| 98 |
+
"tp": 4,
|
| 99 |
+
"fp": 0,
|
| 100 |
+
"fn": 0,
|
| 101 |
+
"tn": 0,
|
| 102 |
+
"support": 4,
|
| 103 |
+
"precision": 1.0,
|
| 104 |
+
"recall": 1.0,
|
| 105 |
+
"f1": 1.0
|
| 106 |
+
},
|
| 107 |
+
"line_items[1].total": {
|
| 108 |
+
"field": "line_items[1].total",
|
| 109 |
+
"field_type": "money",
|
| 110 |
+
"tp": 2,
|
| 111 |
+
"fp": 2,
|
| 112 |
+
"fn": 2,
|
| 113 |
+
"tn": 0,
|
| 114 |
+
"support": 4,
|
| 115 |
+
"precision": 0.5,
|
| 116 |
+
"recall": 0.5,
|
| 117 |
+
"f1": 0.5
|
| 118 |
+
},
|
| 119 |
+
"line_items[1].unit_price": {
|
| 120 |
+
"field": "line_items[1].unit_price",
|
| 121 |
+
"field_type": "money",
|
| 122 |
+
"tp": 2,
|
| 123 |
+
"fp": 2,
|
| 124 |
+
"fn": 2,
|
| 125 |
+
"tn": 0,
|
| 126 |
+
"support": 4,
|
| 127 |
+
"precision": 0.5,
|
| 128 |
+
"recall": 0.5,
|
| 129 |
+
"f1": 0.5
|
| 130 |
+
},
|
| 131 |
+
"line_items[]": {
|
| 132 |
+
"field": "line_items[]",
|
| 133 |
+
"field_type": "number",
|
| 134 |
+
"tp": 5,
|
| 135 |
+
"fp": 0,
|
| 136 |
+
"fn": 0,
|
| 137 |
+
"tn": 0,
|
| 138 |
+
"support": 5,
|
| 139 |
+
"precision": 1.0,
|
| 140 |
+
"recall": 1.0,
|
| 141 |
+
"f1": 1.0
|
| 142 |
+
},
|
| 143 |
+
"merchant": {
|
| 144 |
+
"field": "merchant",
|
| 145 |
+
"field_type": "text",
|
| 146 |
+
"tp": 5,
|
| 147 |
+
"fp": 0,
|
| 148 |
+
"fn": 0,
|
| 149 |
+
"tn": 0,
|
| 150 |
+
"support": 5,
|
| 151 |
+
"precision": 1.0,
|
| 152 |
+
"recall": 1.0,
|
| 153 |
+
"f1": 1.0
|
| 154 |
+
},
|
| 155 |
+
"merchant_phone": {
|
| 156 |
+
"field": "merchant_phone",
|
| 157 |
+
"field_type": "exact",
|
| 158 |
+
"tp": 0,
|
| 159 |
+
"fp": 0,
|
| 160 |
+
"fn": 0,
|
| 161 |
+
"tn": 5,
|
| 162 |
+
"support": 0,
|
| 163 |
+
"precision": 0.0,
|
| 164 |
+
"recall": 0.0,
|
| 165 |
+
"f1": 0.0
|
| 166 |
+
},
|
| 167 |
+
"payment_method": {
|
| 168 |
+
"field": "payment_method",
|
| 169 |
+
"field_type": "exact",
|
| 170 |
+
"tp": 0,
|
| 171 |
+
"fp": 0,
|
| 172 |
+
"fn": 0,
|
| 173 |
+
"tn": 5,
|
| 174 |
+
"support": 0,
|
| 175 |
+
"precision": 0.0,
|
| 176 |
+
"recall": 0.0,
|
| 177 |
+
"f1": 0.0
|
| 178 |
+
},
|
| 179 |
+
"receipt_number": {
|
| 180 |
+
"field": "receipt_number",
|
| 181 |
+
"field_type": "exact",
|
| 182 |
+
"tp": 0,
|
| 183 |
+
"fp": 0,
|
| 184 |
+
"fn": 0,
|
| 185 |
+
"tn": 5,
|
| 186 |
+
"support": 0,
|
| 187 |
+
"precision": 0.0,
|
| 188 |
+
"recall": 0.0,
|
| 189 |
+
"f1": 0.0
|
| 190 |
+
},
|
| 191 |
+
"subtotal": {
|
| 192 |
+
"field": "subtotal",
|
| 193 |
+
"field_type": "money",
|
| 194 |
+
"tp": 5,
|
| 195 |
+
"fp": 0,
|
| 196 |
+
"fn": 0,
|
| 197 |
+
"tn": 0,
|
| 198 |
+
"support": 5,
|
| 199 |
+
"precision": 1.0,
|
| 200 |
+
"recall": 1.0,
|
| 201 |
+
"f1": 1.0
|
| 202 |
+
},
|
| 203 |
+
"tax": {
|
| 204 |
+
"field": "tax",
|
| 205 |
+
"field_type": "money",
|
| 206 |
+
"tp": 5,
|
| 207 |
+
"fp": 0,
|
| 208 |
+
"fn": 0,
|
| 209 |
+
"tn": 0,
|
| 210 |
+
"support": 5,
|
| 211 |
+
"precision": 1.0,
|
| 212 |
+
"recall": 1.0,
|
| 213 |
+
"f1": 1.0
|
| 214 |
+
},
|
| 215 |
+
"tip": {
|
| 216 |
+
"field": "tip",
|
| 217 |
+
"field_type": "money",
|
| 218 |
+
"tp": 0,
|
| 219 |
+
"fp": 0,
|
| 220 |
+
"fn": 0,
|
| 221 |
+
"tn": 5,
|
| 222 |
+
"support": 0,
|
| 223 |
+
"precision": 0.0,
|
| 224 |
+
"recall": 0.0,
|
| 225 |
+
"f1": 0.0
|
| 226 |
+
},
|
| 227 |
+
"total": {
|
| 228 |
+
"field": "total",
|
| 229 |
+
"field_type": "money",
|
| 230 |
+
"tp": 5,
|
| 231 |
+
"fp": 0,
|
| 232 |
+
"fn": 0,
|
| 233 |
+
"tn": 0,
|
| 234 |
+
"support": 5,
|
| 235 |
+
"precision": 1.0,
|
| 236 |
+
"recall": 1.0,
|
| 237 |
+
"f1": 1.0
|
| 238 |
+
},
|
| 239 |
+
"transaction_date": {
|
| 240 |
+
"field": "transaction_date",
|
| 241 |
+
"field_type": "date",
|
| 242 |
+
"tp": 0,
|
| 243 |
+
"fp": 0,
|
| 244 |
+
"fn": 0,
|
| 245 |
+
"tn": 5,
|
| 246 |
+
"support": 0,
|
| 247 |
+
"precision": 0.0,
|
| 248 |
+
"recall": 0.0,
|
| 249 |
+
"f1": 0.0
|
| 250 |
+
},
|
| 251 |
+
"transaction_time": {
|
| 252 |
+
"field": "transaction_time",
|
| 253 |
+
"field_type": "time",
|
| 254 |
+
"tp": 0,
|
| 255 |
+
"fp": 0,
|
| 256 |
+
"fn": 0,
|
| 257 |
+
"tn": 5,
|
| 258 |
+
"support": 0,
|
| 259 |
+
"precision": 0.0,
|
| 260 |
+
"recall": 0.0,
|
| 261 |
+
"f1": 0.0
|
| 262 |
+
},
|
| 263 |
+
"line_items[2].description": {
|
| 264 |
+
"field": "line_items[2].description",
|
| 265 |
+
"field_type": "text",
|
| 266 |
+
"tp": 1,
|
| 267 |
+
"fp": 0,
|
| 268 |
+
"fn": 0,
|
| 269 |
+
"tn": 0,
|
| 270 |
+
"support": 1,
|
| 271 |
+
"precision": 1.0,
|
| 272 |
+
"recall": 1.0,
|
| 273 |
+
"f1": 1.0
|
| 274 |
+
},
|
| 275 |
+
"line_items[2].quantity": {
|
| 276 |
+
"field": "line_items[2].quantity",
|
| 277 |
+
"field_type": "number",
|
| 278 |
+
"tp": 1,
|
| 279 |
+
"fp": 0,
|
| 280 |
+
"fn": 0,
|
| 281 |
+
"tn": 0,
|
| 282 |
+
"support": 1,
|
| 283 |
+
"precision": 1.0,
|
| 284 |
+
"recall": 1.0,
|
| 285 |
+
"f1": 1.0
|
| 286 |
+
},
|
| 287 |
+
"line_items[2].total": {
|
| 288 |
+
"field": "line_items[2].total",
|
| 289 |
+
"field_type": "money",
|
| 290 |
+
"tp": 0,
|
| 291 |
+
"fp": 1,
|
| 292 |
+
"fn": 1,
|
| 293 |
+
"tn": 0,
|
| 294 |
+
"support": 1,
|
| 295 |
+
"precision": 0.0,
|
| 296 |
+
"recall": 0.0,
|
| 297 |
+
"f1": 0.0
|
| 298 |
+
},
|
| 299 |
+
"line_items[2].unit_price": {
|
| 300 |
+
"field": "line_items[2].unit_price",
|
| 301 |
+
"field_type": "money",
|
| 302 |
+
"tp": 0,
|
| 303 |
+
"fp": 1,
|
| 304 |
+
"fn": 1,
|
| 305 |
+
"tn": 0,
|
| 306 |
+
"support": 1,
|
| 307 |
+
"precision": 0.0,
|
| 308 |
+
"recall": 0.0,
|
| 309 |
+
"f1": 0.0
|
| 310 |
+
}
|
| 311 |
+
}
|
| 312 |
+
}
|
evaluation/benchmarks/20260705T064740Z/gpt-5-nano_minimal_cord/receipt_gpt-5-nano_re-minimal_summary.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Evaluation Report β `receipt` on `gpt-5-nano_re-minimal`
|
| 2 |
+
|
| 3 |
+
_Generated: 2026-07-05T06:48:36+00:00_
|
| 4 |
+
|
| 5 |
+
## Headline
|
| 6 |
+
|
| 7 |
+
| Metric | Value |
|
| 8 |
+
|---|---|
|
| 9 |
+
| Documents evaluated | 5 |
|
| 10 |
+
| Extractor errors | 0 |
|
| 11 |
+
| **Micro F1** | **0.8571** |
|
| 12 |
+
| **Macro F1** | **0.7889** |
|
| 13 |
+
| Doc exact-match rate| 60.00% |
|
| 14 |
+
| Mean latency | 4831 ms |
|
| 15 |
+
| Mean cost / doc | $0.011596 |
|
| 16 |
+
| Total cost | $0.0580 |
|
| 17 |
+
| Wall time | 24.16 s |
|
| 18 |
+
|
| 19 |
+
## Per-field performance
|
| 20 |
+
|
| 21 |
+
| Field | Type | Support | Precision | Recall | F1 |
|
| 22 |
+
|---|---|---:|---:|---:|---:|
|
| 23 |
+
| `currency` | exact | 5 | 1.000 | 1.000 | 1.000 |
|
| 24 |
+
| `line_items[0].description` | text | 5 | 1.000 | 1.000 | 1.000 |
|
| 25 |
+
| `line_items[0].quantity` | number | 5 | 1.000 | 1.000 | 1.000 |
|
| 26 |
+
| `line_items[]` | number | 5 | 1.000 | 1.000 | 1.000 |
|
| 27 |
+
| `merchant` | text | 5 | 1.000 | 1.000 | 1.000 |
|
| 28 |
+
| `subtotal` | money | 5 | 1.000 | 1.000 | 1.000 |
|
| 29 |
+
| `tax` | money | 5 | 1.000 | 1.000 | 1.000 |
|
| 30 |
+
| `total` | money | 5 | 1.000 | 1.000 | 1.000 |
|
| 31 |
+
| `line_items[0].total` | money | 5 | 0.600 | 0.600 | 0.600 |
|
| 32 |
+
| `line_items[0].unit_price` | money | 5 | 0.600 | 0.600 | 0.600 |
|
| 33 |
+
| `line_items[1].description` | text | 4 | 1.000 | 1.000 | 1.000 |
|
| 34 |
+
| `line_items[1].quantity` | number | 4 | 1.000 | 1.000 | 1.000 |
|
| 35 |
+
| `line_items[1].total` | money | 4 | 0.500 | 0.500 | 0.500 |
|
| 36 |
+
| `line_items[1].unit_price` | money | 4 | 0.500 | 0.500 | 0.500 |
|
| 37 |
+
| `line_items[2].description` | text | 1 | 1.000 | 1.000 | 1.000 |
|
| 38 |
+
| `line_items[2].quantity` | number | 1 | 1.000 | 1.000 | 1.000 |
|
| 39 |
+
| `line_items[2].total` | money | 1 | 0.000 | 0.000 | 0.000 |
|
| 40 |
+
| `line_items[2].unit_price` | money | 1 | 0.000 | 0.000 | 0.000 |
|
evaluation/benchmarks/20260705T064740Z/gpt-5-nano_minimal_sroie/receipt_gpt-5-nano_re-minimal_per_record.csv
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
doc_id,field,field_type,predicted,truth,outcome,score,latency_ms,cost_usd
|
| 2 |
+
sroie_sample_001,currency,exact,SGD,SGD,TP,1.0,7118.2,0.00999
|
| 3 |
+
sroie_sample_001,line_items[],number,0,0,TP,1.0,7118.2,0.00999
|
| 4 |
+
sroie_sample_001,merchant,text,TAN WOON YANN,TAN WOON YANN,TP,1.0,7118.2,0.00999
|
| 5 |
+
sroie_sample_001,merchant_address.line1,text,"789 KING STREET, TAMAN DAYA, 81100 JOHOR BAHRU","789 KING STREET, TAMAN DAYA, 81100 JOHOR BAHRU",TP,1.0,7118.2,0.00999
|
| 6 |
+
sroie_sample_001,subtotal,money,72,,FP,0.0,7118.2,0.00999
|
| 7 |
+
sroie_sample_001,total,money,72,72,TP,1.0,7118.2,0.00999
|
| 8 |
+
sroie_sample_001,transaction_date,date,2018-06-25,2018-06-25,TP,1.0,7118.2,0.00999
|
| 9 |
+
sroie_sample_002,currency,exact,SGD,SGD,TP,1.0,5640.9,0.013383
|
| 10 |
+
sroie_sample_002,line_items[],number,0,0,TP,1.0,5640.9,0.013383
|
| 11 |
+
sroie_sample_002,merchant,text,SANYU STATIONERY SHOP,SANYU STATIONERY SHOP,TP,1.0,5640.9,0.013383
|
| 12 |
+
sroie_sample_002,merchant_address.line1,text,"NO. 31G&33G, JALAN SETIA INDAH X, U13/X","NO. 31G&33G, JALAN SETIA INDAH X, U13/X 40170 SHAH ALAM",TP,1.0,5640.9,0.013383
|
| 13 |
+
sroie_sample_002,merchant_address.line2,text,40170 SHAH ALAM,,FP,0.0,5640.9,0.013383
|
| 14 |
+
sroie_sample_002,total,money,16.3,16.3,TP,1.0,5640.9,0.013383
|
| 15 |
+
sroie_sample_002,transaction_date,date,2018-02-19,2018-02-19,TP,1.0,5640.9,0.013383
|
| 16 |
+
sroie_sample_003,currency,exact,SGD,SGD,TP,1.0,5609.3,0.01324
|
| 17 |
+
sroie_sample_003,line_items[],number,0,0,TP,1.0,5609.3,0.01324
|
| 18 |
+
sroie_sample_003,merchant,text,KEDAI PAPAN YEW CHUAN,KEDAI PAPAN YEW CHUAN,TP,1.0,5609.3,0.01324
|
| 19 |
+
sroie_sample_003,merchant_address.line1,text,"LOT 276 JALAN BANTING, 43800 DENGKIL, SELANGOR","LOT 276 JALAN BANTING, 43800 DENGKIL, SELANGOR",TP,1.0,5609.3,0.01324
|
| 20 |
+
sroie_sample_003,total,money,110,110,TP,1.0,5609.3,0.01324
|
| 21 |
+
sroie_sample_003,transaction_date,date,2018-05-10,2018-05-10,TP,1.0,5609.3,0.01324
|
| 22 |
+
sroie_sample_004,currency,exact,SGD,SGD,TP,1.0,5265.1,0.01281
|
| 23 |
+
sroie_sample_004,line_items[],number,0,0,TP,1.0,5265.1,0.01281
|
| 24 |
+
sroie_sample_004,merchant,text,OJC MARKETING SDN BHD,OJC MARKETING SDN BHD,TP,1.0,5265.1,0.01281
|
| 25 |
+
sroie_sample_004,merchant_address.line1,text,"NO 2 & 4, JALAN BAYU 4, BANDAR SERI ALAM","NO 2 & 4, JALAN BAYU 4, BANDAR SERI ALAM, 81750 MASAI",TP,0.928,5265.1,0.01281
|
| 26 |
+
sroie_sample_004,merchant_address.line2,text,81750 MASAI,,FP,0.0,5265.1,0.01281
|
| 27 |
+
sroie_sample_004,total,money,48.15,48.15,TP,1.0,5265.1,0.01281
|
| 28 |
+
sroie_sample_004,transaction_date,date,2018-04-17,2018-04-17,TP,1.0,5265.1,0.01281
|
| 29 |
+
sroie_sample_005,currency,exact,SGD,SGD,TP,1.0,3196.2,0.008943
|
| 30 |
+
sroie_sample_005,line_items[],number,0,0,TP,1.0,3196.2,0.008943
|
| 31 |
+
sroie_sample_005,merchant,text,AEON CO. (M) BHD,AEON CO. (M) BHD,TP,1.0,3196.2,0.008943
|
| 32 |
+
sroie_sample_005,merchant_address.line1,text,,"3RD FLR, AEON TAMAN MALURI SHOPPING CENTRE",FN,0.0,3196.2,0.008943
|
| 33 |
+
sroie_sample_005,total,money,39.2,39.2,TP,1.0,3196.2,0.008943
|
| 34 |
+
sroie_sample_005,transaction_date,date,2018-11-30,2018-11-30,TP,1.0,3196.2,0.008943
|
evaluation/benchmarks/20260705T064740Z/gpt-5-nano_minimal_sroie/receipt_gpt-5-nano_re-minimal_summary.json
ADDED
|
@@ -0,0 +1,240 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"generated_at": "2026-07-05T06:48:10.302997+00:00",
|
| 3 |
+
"summary": {
|
| 4 |
+
"model": "gpt-5-nano_re-minimal",
|
| 5 |
+
"doc_type": "receipt",
|
| 6 |
+
"n_docs": 5,
|
| 7 |
+
"errors": 0,
|
| 8 |
+
"micro_f1": 0.9355,
|
| 9 |
+
"macro_f1": 0.9815,
|
| 10 |
+
"doc_exact_match": 0.2,
|
| 11 |
+
"mean_latency_ms": 5365.9,
|
| 12 |
+
"mean_cost_usd": 0.011673,
|
| 13 |
+
"total_cost_usd": 0.0584,
|
| 14 |
+
"wall_time_s": 26.84
|
| 15 |
+
},
|
| 16 |
+
"aggregate": {
|
| 17 |
+
"micro_precision": 0.9062,
|
| 18 |
+
"micro_recall": 0.9667,
|
| 19 |
+
"micro_f1": 0.9355,
|
| 20 |
+
"macro_f1": 0.9815
|
| 21 |
+
},
|
| 22 |
+
"field_stats": {
|
| 23 |
+
"currency": {
|
| 24 |
+
"field": "currency",
|
| 25 |
+
"field_type": "exact",
|
| 26 |
+
"tp": 5,
|
| 27 |
+
"fp": 0,
|
| 28 |
+
"fn": 0,
|
| 29 |
+
"tn": 0,
|
| 30 |
+
"support": 5,
|
| 31 |
+
"precision": 1.0,
|
| 32 |
+
"recall": 1.0,
|
| 33 |
+
"f1": 1.0
|
| 34 |
+
},
|
| 35 |
+
"line_items[]": {
|
| 36 |
+
"field": "line_items[]",
|
| 37 |
+
"field_type": "number",
|
| 38 |
+
"tp": 5,
|
| 39 |
+
"fp": 0,
|
| 40 |
+
"fn": 0,
|
| 41 |
+
"tn": 0,
|
| 42 |
+
"support": 5,
|
| 43 |
+
"precision": 1.0,
|
| 44 |
+
"recall": 1.0,
|
| 45 |
+
"f1": 1.0
|
| 46 |
+
},
|
| 47 |
+
"merchant": {
|
| 48 |
+
"field": "merchant",
|
| 49 |
+
"field_type": "text",
|
| 50 |
+
"tp": 5,
|
| 51 |
+
"fp": 0,
|
| 52 |
+
"fn": 0,
|
| 53 |
+
"tn": 0,
|
| 54 |
+
"support": 5,
|
| 55 |
+
"precision": 1.0,
|
| 56 |
+
"recall": 1.0,
|
| 57 |
+
"f1": 1.0
|
| 58 |
+
},
|
| 59 |
+
"merchant_address.city": {
|
| 60 |
+
"field": "merchant_address.city",
|
| 61 |
+
"field_type": "text",
|
| 62 |
+
"tp": 0,
|
| 63 |
+
"fp": 0,
|
| 64 |
+
"fn": 0,
|
| 65 |
+
"tn": 5,
|
| 66 |
+
"support": 0,
|
| 67 |
+
"precision": 0.0,
|
| 68 |
+
"recall": 0.0,
|
| 69 |
+
"f1": 0.0
|
| 70 |
+
},
|
| 71 |
+
"merchant_address.country": {
|
| 72 |
+
"field": "merchant_address.country",
|
| 73 |
+
"field_type": "exact",
|
| 74 |
+
"tp": 0,
|
| 75 |
+
"fp": 0,
|
| 76 |
+
"fn": 0,
|
| 77 |
+
"tn": 5,
|
| 78 |
+
"support": 0,
|
| 79 |
+
"precision": 0.0,
|
| 80 |
+
"recall": 0.0,
|
| 81 |
+
"f1": 0.0
|
| 82 |
+
},
|
| 83 |
+
"merchant_address.line1": {
|
| 84 |
+
"field": "merchant_address.line1",
|
| 85 |
+
"field_type": "text",
|
| 86 |
+
"tp": 4,
|
| 87 |
+
"fp": 0,
|
| 88 |
+
"fn": 1,
|
| 89 |
+
"tn": 0,
|
| 90 |
+
"support": 5,
|
| 91 |
+
"precision": 1.0,
|
| 92 |
+
"recall": 0.8,
|
| 93 |
+
"f1": 0.8889
|
| 94 |
+
},
|
| 95 |
+
"merchant_address.line2": {
|
| 96 |
+
"field": "merchant_address.line2",
|
| 97 |
+
"field_type": "text",
|
| 98 |
+
"tp": 0,
|
| 99 |
+
"fp": 2,
|
| 100 |
+
"fn": 0,
|
| 101 |
+
"tn": 3,
|
| 102 |
+
"support": 0,
|
| 103 |
+
"precision": 0.0,
|
| 104 |
+
"recall": 0.0,
|
| 105 |
+
"f1": 0.0
|
| 106 |
+
},
|
| 107 |
+
"merchant_address.postal_code": {
|
| 108 |
+
"field": "merchant_address.postal_code",
|
| 109 |
+
"field_type": "exact",
|
| 110 |
+
"tp": 0,
|
| 111 |
+
"fp": 0,
|
| 112 |
+
"fn": 0,
|
| 113 |
+
"tn": 5,
|
| 114 |
+
"support": 0,
|
| 115 |
+
"precision": 0.0,
|
| 116 |
+
"recall": 0.0,
|
| 117 |
+
"f1": 0.0
|
| 118 |
+
},
|
| 119 |
+
"merchant_address.region": {
|
| 120 |
+
"field": "merchant_address.region",
|
| 121 |
+
"field_type": "text",
|
| 122 |
+
"tp": 0,
|
| 123 |
+
"fp": 0,
|
| 124 |
+
"fn": 0,
|
| 125 |
+
"tn": 5,
|
| 126 |
+
"support": 0,
|
| 127 |
+
"precision": 0.0,
|
| 128 |
+
"recall": 0.0,
|
| 129 |
+
"f1": 0.0
|
| 130 |
+
},
|
| 131 |
+
"merchant_phone": {
|
| 132 |
+
"field": "merchant_phone",
|
| 133 |
+
"field_type": "exact",
|
| 134 |
+
"tp": 0,
|
| 135 |
+
"fp": 0,
|
| 136 |
+
"fn": 0,
|
| 137 |
+
"tn": 5,
|
| 138 |
+
"support": 0,
|
| 139 |
+
"precision": 0.0,
|
| 140 |
+
"recall": 0.0,
|
| 141 |
+
"f1": 0.0
|
| 142 |
+
},
|
| 143 |
+
"payment_method": {
|
| 144 |
+
"field": "payment_method",
|
| 145 |
+
"field_type": "exact",
|
| 146 |
+
"tp": 0,
|
| 147 |
+
"fp": 0,
|
| 148 |
+
"fn": 0,
|
| 149 |
+
"tn": 5,
|
| 150 |
+
"support": 0,
|
| 151 |
+
"precision": 0.0,
|
| 152 |
+
"recall": 0.0,
|
| 153 |
+
"f1": 0.0
|
| 154 |
+
},
|
| 155 |
+
"receipt_number": {
|
| 156 |
+
"field": "receipt_number",
|
| 157 |
+
"field_type": "exact",
|
| 158 |
+
"tp": 0,
|
| 159 |
+
"fp": 0,
|
| 160 |
+
"fn": 0,
|
| 161 |
+
"tn": 5,
|
| 162 |
+
"support": 0,
|
| 163 |
+
"precision": 0.0,
|
| 164 |
+
"recall": 0.0,
|
| 165 |
+
"f1": 0.0
|
| 166 |
+
},
|
| 167 |
+
"subtotal": {
|
| 168 |
+
"field": "subtotal",
|
| 169 |
+
"field_type": "money",
|
| 170 |
+
"tp": 0,
|
| 171 |
+
"fp": 1,
|
| 172 |
+
"fn": 0,
|
| 173 |
+
"tn": 4,
|
| 174 |
+
"support": 0,
|
| 175 |
+
"precision": 0.0,
|
| 176 |
+
"recall": 0.0,
|
| 177 |
+
"f1": 0.0
|
| 178 |
+
},
|
| 179 |
+
"tax": {
|
| 180 |
+
"field": "tax",
|
| 181 |
+
"field_type": "money",
|
| 182 |
+
"tp": 0,
|
| 183 |
+
"fp": 0,
|
| 184 |
+
"fn": 0,
|
| 185 |
+
"tn": 5,
|
| 186 |
+
"support": 0,
|
| 187 |
+
"precision": 0.0,
|
| 188 |
+
"recall": 0.0,
|
| 189 |
+
"f1": 0.0
|
| 190 |
+
},
|
| 191 |
+
"tip": {
|
| 192 |
+
"field": "tip",
|
| 193 |
+
"field_type": "money",
|
| 194 |
+
"tp": 0,
|
| 195 |
+
"fp": 0,
|
| 196 |
+
"fn": 0,
|
| 197 |
+
"tn": 5,
|
| 198 |
+
"support": 0,
|
| 199 |
+
"precision": 0.0,
|
| 200 |
+
"recall": 0.0,
|
| 201 |
+
"f1": 0.0
|
| 202 |
+
},
|
| 203 |
+
"total": {
|
| 204 |
+
"field": "total",
|
| 205 |
+
"field_type": "money",
|
| 206 |
+
"tp": 5,
|
| 207 |
+
"fp": 0,
|
| 208 |
+
"fn": 0,
|
| 209 |
+
"tn": 0,
|
| 210 |
+
"support": 5,
|
| 211 |
+
"precision": 1.0,
|
| 212 |
+
"recall": 1.0,
|
| 213 |
+
"f1": 1.0
|
| 214 |
+
},
|
| 215 |
+
"transaction_date": {
|
| 216 |
+
"field": "transaction_date",
|
| 217 |
+
"field_type": "date",
|
| 218 |
+
"tp": 5,
|
| 219 |
+
"fp": 0,
|
| 220 |
+
"fn": 0,
|
| 221 |
+
"tn": 0,
|
| 222 |
+
"support": 5,
|
| 223 |
+
"precision": 1.0,
|
| 224 |
+
"recall": 1.0,
|
| 225 |
+
"f1": 1.0
|
| 226 |
+
},
|
| 227 |
+
"transaction_time": {
|
| 228 |
+
"field": "transaction_time",
|
| 229 |
+
"field_type": "time",
|
| 230 |
+
"tp": 0,
|
| 231 |
+
"fp": 0,
|
| 232 |
+
"fn": 0,
|
| 233 |
+
"tn": 5,
|
| 234 |
+
"support": 0,
|
| 235 |
+
"precision": 0.0,
|
| 236 |
+
"recall": 0.0,
|
| 237 |
+
"f1": 0.0
|
| 238 |
+
}
|
| 239 |
+
}
|
| 240 |
+
}
|
evaluation/benchmarks/20260705T064740Z/gpt-5-nano_minimal_sroie/receipt_gpt-5-nano_re-minimal_summary.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Evaluation Report β `receipt` on `gpt-5-nano_re-minimal`
|
| 2 |
+
|
| 3 |
+
_Generated: 2026-07-05T06:48:10+00:00_
|
| 4 |
+
|
| 5 |
+
## Headline
|
| 6 |
+
|
| 7 |
+
| Metric | Value |
|
| 8 |
+
|---|---|
|
| 9 |
+
| Documents evaluated | 5 |
|
| 10 |
+
| Extractor errors | 0 |
|
| 11 |
+
| **Micro F1** | **0.9355** |
|
| 12 |
+
| **Macro F1** | **0.9815** |
|
| 13 |
+
| Doc exact-match rate| 20.00% |
|
| 14 |
+
| Mean latency | 5366 ms |
|
| 15 |
+
| Mean cost / doc | $0.011673 |
|
| 16 |
+
| Total cost | $0.0584 |
|
| 17 |
+
| Wall time | 26.84 s |
|
| 18 |
+
|
| 19 |
+
## Per-field performance
|
| 20 |
+
|
| 21 |
+
| Field | Type | Support | Precision | Recall | F1 |
|
| 22 |
+
|---|---|---:|---:|---:|---:|
|
| 23 |
+
| `currency` | exact | 5 | 1.000 | 1.000 | 1.000 |
|
| 24 |
+
| `line_items[]` | number | 5 | 1.000 | 1.000 | 1.000 |
|
| 25 |
+
| `merchant` | text | 5 | 1.000 | 1.000 | 1.000 |
|
| 26 |
+
| `total` | money | 5 | 1.000 | 1.000 | 1.000 |
|
| 27 |
+
| `transaction_date` | date | 5 | 1.000 | 1.000 | 1.000 |
|
| 28 |
+
| `merchant_address.line1` | text | 5 | 1.000 | 0.800 | 0.889 |
|
| 29 |
+
| `merchant_address.line2` | text | 0 | 0.000 | 0.000 | 0.000 |
|
| 30 |
+
| `subtotal` | money | 0 | 0.000 | 0.000 | 0.000 |
|
evaluation/benchmarks/20260705T064740Z/gpt-5_minimal_cord/receipt_gpt-5_re-minimal_per_record.csv
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
doc_id,field,field_type,predicted,truth,outcome,score,latency_ms,cost_usd
|
| 2 |
+
cord_sample_001,currency,exact,KRW,KRW,TP,1.0,6031.0,0.012625
|
| 3 |
+
cord_sample_001,line_items[0].description,text,Iced Americano,Iced Americano,TP,1.0,6031.0,0.012625
|
| 4 |
+
cord_sample_001,line_items[0].quantity,number,1,1,TP,1.0,6031.0,0.012625
|
| 5 |
+
cord_sample_001,line_items[0].total,money,4500,4500,TP,1.0,6031.0,0.012625
|
| 6 |
+
cord_sample_001,line_items[0].unit_price,money,4500,4500,TP,1.0,6031.0,0.012625
|
| 7 |
+
cord_sample_001,line_items[1].description,text,Choco Chip Muffin,Choco Chip Muffin,TP,1.0,6031.0,0.012625
|
| 8 |
+
cord_sample_001,line_items[1].quantity,number,1,1,TP,1.0,6031.0,0.012625
|
| 9 |
+
cord_sample_001,line_items[1].total,money,3800,3800,TP,1.0,6031.0,0.012625
|
| 10 |
+
cord_sample_001,line_items[1].unit_price,money,3800,3800,TP,1.0,6031.0,0.012625
|
| 11 |
+
cord_sample_001,line_items[],number,2,2,TP,1.0,6031.0,0.012625
|
| 12 |
+
cord_sample_001,merchant,text,Unknown merchant,Unknown merchant,TP,1.0,6031.0,0.012625
|
| 13 |
+
cord_sample_001,subtotal,money,8300,8300,TP,1.0,6031.0,0.012625
|
| 14 |
+
cord_sample_001,tax,money,830,830,TP,1.0,6031.0,0.012625
|
| 15 |
+
cord_sample_001,total,money,9130,9130,TP,1.0,6031.0,0.012625
|
| 16 |
+
cord_sample_002,currency,exact,KRW,KRW,TP,1.0,4906.3,0.011983
|
| 17 |
+
cord_sample_002,line_items[0].description,text,Bibimbap Set,Bibimbap Set,TP,1.0,4906.3,0.011983
|
| 18 |
+
cord_sample_002,line_items[0].quantity,number,2,2,TP,1.0,4906.3,0.011983
|
| 19 |
+
cord_sample_002,line_items[0].total,money,24000,24000,TP,1.0,4906.3,0.011983
|
| 20 |
+
cord_sample_002,line_items[0].unit_price,money,,12000,FN,0.0,4906.3,0.011983
|
| 21 |
+
cord_sample_002,line_items[1].description,text,Miso Soup,Miso Soup,TP,1.0,4906.3,0.011983
|
| 22 |
+
cord_sample_002,line_items[1].quantity,number,2,2,TP,1.0,4906.3,0.011983
|
| 23 |
+
cord_sample_002,line_items[1].total,money,5000,5000,TP,1.0,4906.3,0.011983
|
| 24 |
+
cord_sample_002,line_items[1].unit_price,money,,2500,FN,0.0,4906.3,0.011983
|
| 25 |
+
cord_sample_002,line_items[],number,2,2,TP,1.0,4906.3,0.011983
|
| 26 |
+
cord_sample_002,merchant,text,Unknown merchant,Unknown merchant,TP,1.0,4906.3,0.011983
|
| 27 |
+
cord_sample_002,subtotal,money,29000,29000,TP,1.0,4906.3,0.011983
|
| 28 |
+
cord_sample_002,tax,money,2900,2900,TP,1.0,4906.3,0.011983
|
| 29 |
+
cord_sample_002,total,money,31900,31900,TP,1.0,4906.3,0.011983
|
| 30 |
+
cord_sample_003,currency,exact,KRW,KRW,TP,1.0,4453.5,0.011678
|
| 31 |
+
cord_sample_003,line_items[0].description,text,Latte,Latte,TP,1.0,4453.5,0.011678
|
| 32 |
+
cord_sample_003,line_items[0].quantity,number,1,1,TP,1.0,4453.5,0.011678
|
| 33 |
+
cord_sample_003,line_items[0].total,money,5000,5000,TP,1.0,4453.5,0.011678
|
| 34 |
+
cord_sample_003,line_items[0].unit_price,money,5000,5000,TP,1.0,4453.5,0.011678
|
| 35 |
+
cord_sample_003,line_items[],number,1,1,TP,1.0,4453.5,0.011678
|
| 36 |
+
cord_sample_003,merchant,text,Unknown merchant,Unknown merchant,TP,1.0,4453.5,0.011678
|
| 37 |
+
cord_sample_003,subtotal,money,5000,5000,TP,1.0,4453.5,0.011678
|
| 38 |
+
cord_sample_003,tax,money,500,500,TP,1.0,4453.5,0.011678
|
| 39 |
+
cord_sample_003,total,money,5500,5500,TP,1.0,4453.5,0.011678
|
| 40 |
+
cord_sample_004,currency,exact,KRW,KRW,TP,1.0,5115.1,0.012975
|
| 41 |
+
cord_sample_004,line_items[0].description,text,Kimchi Fried Rice,Kimchi Fried Rice,TP,1.0,5115.1,0.012975
|
| 42 |
+
cord_sample_004,line_items[0].quantity,number,1,1,TP,1.0,5115.1,0.012975
|
| 43 |
+
cord_sample_004,line_items[0].total,money,9500,9500,TP,1.0,5115.1,0.012975
|
| 44 |
+
cord_sample_004,line_items[0].unit_price,money,,9500,FN,0.0,5115.1,0.012975
|
| 45 |
+
cord_sample_004,line_items[1].description,text,Egg Roll,Egg Roll,TP,1.0,5115.1,0.012975
|
| 46 |
+
cord_sample_004,line_items[1].quantity,number,1,1,TP,1.0,5115.1,0.012975
|
| 47 |
+
cord_sample_004,line_items[1].total,money,3500,3500,TP,1.0,5115.1,0.012975
|
| 48 |
+
cord_sample_004,line_items[1].unit_price,money,,3500,FN,0.0,5115.1,0.012975
|
| 49 |
+
cord_sample_004,line_items[2].description,text,Soft Drink,Soft Drink,TP,1.0,5115.1,0.012975
|
| 50 |
+
cord_sample_004,line_items[2].quantity,number,2,2,TP,1.0,5115.1,0.012975
|
| 51 |
+
cord_sample_004,line_items[2].total,money,4000,4000,TP,1.0,5115.1,0.012975
|
| 52 |
+
cord_sample_004,line_items[2].unit_price,money,,2000,FN,0.0,5115.1,0.012975
|
| 53 |
+
cord_sample_004,line_items[],number,3,3,TP,1.0,5115.1,0.012975
|
| 54 |
+
cord_sample_004,merchant,text,Unknown merchant,Unknown merchant,TP,1.0,5115.1,0.012975
|
| 55 |
+
cord_sample_004,subtotal,money,17000,17000,TP,1.0,5115.1,0.012975
|
| 56 |
+
cord_sample_004,tax,money,1700,1700,TP,1.0,5115.1,0.012975
|
| 57 |
+
cord_sample_004,total,money,18700,18700,TP,1.0,5115.1,0.012975
|
| 58 |
+
cord_sample_005,currency,exact,KRW,KRW,TP,1.0,5599.3,0.01259
|
| 59 |
+
cord_sample_005,line_items[0].description,text,Espresso,Espresso,TP,1.0,5599.3,0.01259
|
| 60 |
+
cord_sample_005,line_items[0].quantity,number,1,1,TP,1.0,5599.3,0.01259
|
| 61 |
+
cord_sample_005,line_items[0].total,money,3500,3500,TP,1.0,5599.3,0.01259
|
| 62 |
+
cord_sample_005,line_items[0].unit_price,money,3500,3500,TP,1.0,5599.3,0.01259
|
| 63 |
+
cord_sample_005,line_items[1].description,text,Cheesecake Slice,Cheesecake Slice,TP,1.0,5599.3,0.01259
|
| 64 |
+
cord_sample_005,line_items[1].quantity,number,1,1,TP,1.0,5599.3,0.01259
|
| 65 |
+
cord_sample_005,line_items[1].total,money,6500,6500,TP,1.0,5599.3,0.01259
|
| 66 |
+
cord_sample_005,line_items[1].unit_price,money,6500,6500,TP,1.0,5599.3,0.01259
|
| 67 |
+
cord_sample_005,line_items[],number,2,2,TP,1.0,5599.3,0.01259
|
| 68 |
+
cord_sample_005,merchant,text,Unknown merchant,Unknown merchant,TP,1.0,5599.3,0.01259
|
| 69 |
+
cord_sample_005,subtotal,money,10000,10000,TP,1.0,5599.3,0.01259
|
| 70 |
+
cord_sample_005,tax,money,1000,1000,TP,1.0,5599.3,0.01259
|
| 71 |
+
cord_sample_005,total,money,11000,11000,TP,1.0,5599.3,0.01259
|
evaluation/benchmarks/20260705T064740Z/gpt-5_minimal_cord/receipt_gpt-5_re-minimal_summary.json
ADDED
|
@@ -0,0 +1,312 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"generated_at": "2026-07-05T06:50:38.925721+00:00",
|
| 3 |
+
"summary": {
|
| 4 |
+
"model": "gpt-5_re-minimal",
|
| 5 |
+
"doc_type": "receipt",
|
| 6 |
+
"n_docs": 5,
|
| 7 |
+
"errors": 0,
|
| 8 |
+
"micro_f1": 0.963,
|
| 9 |
+
"macro_f1": 0.912,
|
| 10 |
+
"doc_exact_match": 0.6,
|
| 11 |
+
"mean_latency_ms": 5221.0,
|
| 12 |
+
"mean_cost_usd": 0.01237,
|
| 13 |
+
"total_cost_usd": 0.0619,
|
| 14 |
+
"wall_time_s": 26.11
|
| 15 |
+
},
|
| 16 |
+
"aggregate": {
|
| 17 |
+
"micro_precision": 1.0,
|
| 18 |
+
"micro_recall": 0.9286,
|
| 19 |
+
"micro_f1": 0.963,
|
| 20 |
+
"macro_f1": 0.912
|
| 21 |
+
},
|
| 22 |
+
"field_stats": {
|
| 23 |
+
"currency": {
|
| 24 |
+
"field": "currency",
|
| 25 |
+
"field_type": "exact",
|
| 26 |
+
"tp": 5,
|
| 27 |
+
"fp": 0,
|
| 28 |
+
"fn": 0,
|
| 29 |
+
"tn": 0,
|
| 30 |
+
"support": 5,
|
| 31 |
+
"precision": 1.0,
|
| 32 |
+
"recall": 1.0,
|
| 33 |
+
"f1": 1.0
|
| 34 |
+
},
|
| 35 |
+
"line_items[0].description": {
|
| 36 |
+
"field": "line_items[0].description",
|
| 37 |
+
"field_type": "text",
|
| 38 |
+
"tp": 5,
|
| 39 |
+
"fp": 0,
|
| 40 |
+
"fn": 0,
|
| 41 |
+
"tn": 0,
|
| 42 |
+
"support": 5,
|
| 43 |
+
"precision": 1.0,
|
| 44 |
+
"recall": 1.0,
|
| 45 |
+
"f1": 1.0
|
| 46 |
+
},
|
| 47 |
+
"line_items[0].quantity": {
|
| 48 |
+
"field": "line_items[0].quantity",
|
| 49 |
+
"field_type": "number",
|
| 50 |
+
"tp": 5,
|
| 51 |
+
"fp": 0,
|
| 52 |
+
"fn": 0,
|
| 53 |
+
"tn": 0,
|
| 54 |
+
"support": 5,
|
| 55 |
+
"precision": 1.0,
|
| 56 |
+
"recall": 1.0,
|
| 57 |
+
"f1": 1.0
|
| 58 |
+
},
|
| 59 |
+
"line_items[0].total": {
|
| 60 |
+
"field": "line_items[0].total",
|
| 61 |
+
"field_type": "money",
|
| 62 |
+
"tp": 5,
|
| 63 |
+
"fp": 0,
|
| 64 |
+
"fn": 0,
|
| 65 |
+
"tn": 0,
|
| 66 |
+
"support": 5,
|
| 67 |
+
"precision": 1.0,
|
| 68 |
+
"recall": 1.0,
|
| 69 |
+
"f1": 1.0
|
| 70 |
+
},
|
| 71 |
+
"line_items[0].unit_price": {
|
| 72 |
+
"field": "line_items[0].unit_price",
|
| 73 |
+
"field_type": "money",
|
| 74 |
+
"tp": 3,
|
| 75 |
+
"fp": 0,
|
| 76 |
+
"fn": 2,
|
| 77 |
+
"tn": 0,
|
| 78 |
+
"support": 5,
|
| 79 |
+
"precision": 1.0,
|
| 80 |
+
"recall": 0.6,
|
| 81 |
+
"f1": 0.75
|
| 82 |
+
},
|
| 83 |
+
"line_items[1].description": {
|
| 84 |
+
"field": "line_items[1].description",
|
| 85 |
+
"field_type": "text",
|
| 86 |
+
"tp": 4,
|
| 87 |
+
"fp": 0,
|
| 88 |
+
"fn": 0,
|
| 89 |
+
"tn": 0,
|
| 90 |
+
"support": 4,
|
| 91 |
+
"precision": 1.0,
|
| 92 |
+
"recall": 1.0,
|
| 93 |
+
"f1": 1.0
|
| 94 |
+
},
|
| 95 |
+
"line_items[1].quantity": {
|
| 96 |
+
"field": "line_items[1].quantity",
|
| 97 |
+
"field_type": "number",
|
| 98 |
+
"tp": 4,
|
| 99 |
+
"fp": 0,
|
| 100 |
+
"fn": 0,
|
| 101 |
+
"tn": 0,
|
| 102 |
+
"support": 4,
|
| 103 |
+
"precision": 1.0,
|
| 104 |
+
"recall": 1.0,
|
| 105 |
+
"f1": 1.0
|
| 106 |
+
},
|
| 107 |
+
"line_items[1].total": {
|
| 108 |
+
"field": "line_items[1].total",
|
| 109 |
+
"field_type": "money",
|
| 110 |
+
"tp": 4,
|
| 111 |
+
"fp": 0,
|
| 112 |
+
"fn": 0,
|
| 113 |
+
"tn": 0,
|
| 114 |
+
"support": 4,
|
| 115 |
+
"precision": 1.0,
|
| 116 |
+
"recall": 1.0,
|
| 117 |
+
"f1": 1.0
|
| 118 |
+
},
|
| 119 |
+
"line_items[1].unit_price": {
|
| 120 |
+
"field": "line_items[1].unit_price",
|
| 121 |
+
"field_type": "money",
|
| 122 |
+
"tp": 2,
|
| 123 |
+
"fp": 0,
|
| 124 |
+
"fn": 2,
|
| 125 |
+
"tn": 0,
|
| 126 |
+
"support": 4,
|
| 127 |
+
"precision": 1.0,
|
| 128 |
+
"recall": 0.5,
|
| 129 |
+
"f1": 0.6667
|
| 130 |
+
},
|
| 131 |
+
"line_items[]": {
|
| 132 |
+
"field": "line_items[]",
|
| 133 |
+
"field_type": "number",
|
| 134 |
+
"tp": 5,
|
| 135 |
+
"fp": 0,
|
| 136 |
+
"fn": 0,
|
| 137 |
+
"tn": 0,
|
| 138 |
+
"support": 5,
|
| 139 |
+
"precision": 1.0,
|
| 140 |
+
"recall": 1.0,
|
| 141 |
+
"f1": 1.0
|
| 142 |
+
},
|
| 143 |
+
"merchant": {
|
| 144 |
+
"field": "merchant",
|
| 145 |
+
"field_type": "text",
|
| 146 |
+
"tp": 5,
|
| 147 |
+
"fp": 0,
|
| 148 |
+
"fn": 0,
|
| 149 |
+
"tn": 0,
|
| 150 |
+
"support": 5,
|
| 151 |
+
"precision": 1.0,
|
| 152 |
+
"recall": 1.0,
|
| 153 |
+
"f1": 1.0
|
| 154 |
+
},
|
| 155 |
+
"merchant_phone": {
|
| 156 |
+
"field": "merchant_phone",
|
| 157 |
+
"field_type": "exact",
|
| 158 |
+
"tp": 0,
|
| 159 |
+
"fp": 0,
|
| 160 |
+
"fn": 0,
|
| 161 |
+
"tn": 5,
|
| 162 |
+
"support": 0,
|
| 163 |
+
"precision": 0.0,
|
| 164 |
+
"recall": 0.0,
|
| 165 |
+
"f1": 0.0
|
| 166 |
+
},
|
| 167 |
+
"payment_method": {
|
| 168 |
+
"field": "payment_method",
|
| 169 |
+
"field_type": "exact",
|
| 170 |
+
"tp": 0,
|
| 171 |
+
"fp": 0,
|
| 172 |
+
"fn": 0,
|
| 173 |
+
"tn": 5,
|
| 174 |
+
"support": 0,
|
| 175 |
+
"precision": 0.0,
|
| 176 |
+
"recall": 0.0,
|
| 177 |
+
"f1": 0.0
|
| 178 |
+
},
|
| 179 |
+
"receipt_number": {
|
| 180 |
+
"field": "receipt_number",
|
| 181 |
+
"field_type": "exact",
|
| 182 |
+
"tp": 0,
|
| 183 |
+
"fp": 0,
|
| 184 |
+
"fn": 0,
|
| 185 |
+
"tn": 5,
|
| 186 |
+
"support": 0,
|
| 187 |
+
"precision": 0.0,
|
| 188 |
+
"recall": 0.0,
|
| 189 |
+
"f1": 0.0
|
| 190 |
+
},
|
| 191 |
+
"subtotal": {
|
| 192 |
+
"field": "subtotal",
|
| 193 |
+
"field_type": "money",
|
| 194 |
+
"tp": 5,
|
| 195 |
+
"fp": 0,
|
| 196 |
+
"fn": 0,
|
| 197 |
+
"tn": 0,
|
| 198 |
+
"support": 5,
|
| 199 |
+
"precision": 1.0,
|
| 200 |
+
"recall": 1.0,
|
| 201 |
+
"f1": 1.0
|
| 202 |
+
},
|
| 203 |
+
"tax": {
|
| 204 |
+
"field": "tax",
|
| 205 |
+
"field_type": "money",
|
| 206 |
+
"tp": 5,
|
| 207 |
+
"fp": 0,
|
| 208 |
+
"fn": 0,
|
| 209 |
+
"tn": 0,
|
| 210 |
+
"support": 5,
|
| 211 |
+
"precision": 1.0,
|
| 212 |
+
"recall": 1.0,
|
| 213 |
+
"f1": 1.0
|
| 214 |
+
},
|
| 215 |
+
"tip": {
|
| 216 |
+
"field": "tip",
|
| 217 |
+
"field_type": "money",
|
| 218 |
+
"tp": 0,
|
| 219 |
+
"fp": 0,
|
| 220 |
+
"fn": 0,
|
| 221 |
+
"tn": 5,
|
| 222 |
+
"support": 0,
|
| 223 |
+
"precision": 0.0,
|
| 224 |
+
"recall": 0.0,
|
| 225 |
+
"f1": 0.0
|
| 226 |
+
},
|
| 227 |
+
"total": {
|
| 228 |
+
"field": "total",
|
| 229 |
+
"field_type": "money",
|
| 230 |
+
"tp": 5,
|
| 231 |
+
"fp": 0,
|
| 232 |
+
"fn": 0,
|
| 233 |
+
"tn": 0,
|
| 234 |
+
"support": 5,
|
| 235 |
+
"precision": 1.0,
|
| 236 |
+
"recall": 1.0,
|
| 237 |
+
"f1": 1.0
|
| 238 |
+
},
|
| 239 |
+
"transaction_date": {
|
| 240 |
+
"field": "transaction_date",
|
| 241 |
+
"field_type": "date",
|
| 242 |
+
"tp": 0,
|
| 243 |
+
"fp": 0,
|
| 244 |
+
"fn": 0,
|
| 245 |
+
"tn": 5,
|
| 246 |
+
"support": 0,
|
| 247 |
+
"precision": 0.0,
|
| 248 |
+
"recall": 0.0,
|
| 249 |
+
"f1": 0.0
|
| 250 |
+
},
|
| 251 |
+
"transaction_time": {
|
| 252 |
+
"field": "transaction_time",
|
| 253 |
+
"field_type": "time",
|
| 254 |
+
"tp": 0,
|
| 255 |
+
"fp": 0,
|
| 256 |
+
"fn": 0,
|
| 257 |
+
"tn": 5,
|
| 258 |
+
"support": 0,
|
| 259 |
+
"precision": 0.0,
|
| 260 |
+
"recall": 0.0,
|
| 261 |
+
"f1": 0.0
|
| 262 |
+
},
|
| 263 |
+
"line_items[2].description": {
|
| 264 |
+
"field": "line_items[2].description",
|
| 265 |
+
"field_type": "text",
|
| 266 |
+
"tp": 1,
|
| 267 |
+
"fp": 0,
|
| 268 |
+
"fn": 0,
|
| 269 |
+
"tn": 0,
|
| 270 |
+
"support": 1,
|
| 271 |
+
"precision": 1.0,
|
| 272 |
+
"recall": 1.0,
|
| 273 |
+
"f1": 1.0
|
| 274 |
+
},
|
| 275 |
+
"line_items[2].quantity": {
|
| 276 |
+
"field": "line_items[2].quantity",
|
| 277 |
+
"field_type": "number",
|
| 278 |
+
"tp": 1,
|
| 279 |
+
"fp": 0,
|
| 280 |
+
"fn": 0,
|
| 281 |
+
"tn": 0,
|
| 282 |
+
"support": 1,
|
| 283 |
+
"precision": 1.0,
|
| 284 |
+
"recall": 1.0,
|
| 285 |
+
"f1": 1.0
|
| 286 |
+
},
|
| 287 |
+
"line_items[2].total": {
|
| 288 |
+
"field": "line_items[2].total",
|
| 289 |
+
"field_type": "money",
|
| 290 |
+
"tp": 1,
|
| 291 |
+
"fp": 0,
|
| 292 |
+
"fn": 0,
|
| 293 |
+
"tn": 0,
|
| 294 |
+
"support": 1,
|
| 295 |
+
"precision": 1.0,
|
| 296 |
+
"recall": 1.0,
|
| 297 |
+
"f1": 1.0
|
| 298 |
+
},
|
| 299 |
+
"line_items[2].unit_price": {
|
| 300 |
+
"field": "line_items[2].unit_price",
|
| 301 |
+
"field_type": "money",
|
| 302 |
+
"tp": 0,
|
| 303 |
+
"fp": 0,
|
| 304 |
+
"fn": 1,
|
| 305 |
+
"tn": 0,
|
| 306 |
+
"support": 1,
|
| 307 |
+
"precision": 0.0,
|
| 308 |
+
"recall": 0.0,
|
| 309 |
+
"f1": 0.0
|
| 310 |
+
}
|
| 311 |
+
}
|
| 312 |
+
}
|
evaluation/benchmarks/20260705T064740Z/gpt-5_minimal_cord/receipt_gpt-5_re-minimal_summary.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Evaluation Report β `receipt` on `gpt-5_re-minimal`
|
| 2 |
+
|
| 3 |
+
_Generated: 2026-07-05T06:50:38+00:00_
|
| 4 |
+
|
| 5 |
+
## Headline
|
| 6 |
+
|
| 7 |
+
| Metric | Value |
|
| 8 |
+
|---|---|
|
| 9 |
+
| Documents evaluated | 5 |
|
| 10 |
+
| Extractor errors | 0 |
|
| 11 |
+
| **Micro F1** | **0.9630** |
|
| 12 |
+
| **Macro F1** | **0.9120** |
|
| 13 |
+
| Doc exact-match rate| 60.00% |
|
| 14 |
+
| Mean latency | 5221 ms |
|
| 15 |
+
| Mean cost / doc | $0.012370 |
|
| 16 |
+
| Total cost | $0.0619 |
|
| 17 |
+
| Wall time | 26.11 s |
|
| 18 |
+
|
| 19 |
+
## Per-field performance
|
| 20 |
+
|
| 21 |
+
| Field | Type | Support | Precision | Recall | F1 |
|
| 22 |
+
|---|---|---:|---:|---:|---:|
|
| 23 |
+
| `currency` | exact | 5 | 1.000 | 1.000 | 1.000 |
|
| 24 |
+
| `line_items[0].description` | text | 5 | 1.000 | 1.000 | 1.000 |
|
| 25 |
+
| `line_items[0].quantity` | number | 5 | 1.000 | 1.000 | 1.000 |
|
| 26 |
+
| `line_items[0].total` | money | 5 | 1.000 | 1.000 | 1.000 |
|
| 27 |
+
| `line_items[]` | number | 5 | 1.000 | 1.000 | 1.000 |
|
| 28 |
+
| `merchant` | text | 5 | 1.000 | 1.000 | 1.000 |
|
| 29 |
+
| `subtotal` | money | 5 | 1.000 | 1.000 | 1.000 |
|
| 30 |
+
| `tax` | money | 5 | 1.000 | 1.000 | 1.000 |
|
| 31 |
+
| `total` | money | 5 | 1.000 | 1.000 | 1.000 |
|
| 32 |
+
| `line_items[0].unit_price` | money | 5 | 1.000 | 0.600 | 0.750 |
|
| 33 |
+
| `line_items[1].description` | text | 4 | 1.000 | 1.000 | 1.000 |
|
| 34 |
+
| `line_items[1].quantity` | number | 4 | 1.000 | 1.000 | 1.000 |
|
| 35 |
+
| `line_items[1].total` | money | 4 | 1.000 | 1.000 | 1.000 |
|
| 36 |
+
| `line_items[1].unit_price` | money | 4 | 1.000 | 0.500 | 0.667 |
|
| 37 |
+
| `line_items[2].description` | text | 1 | 1.000 | 1.000 | 1.000 |
|
| 38 |
+
| `line_items[2].quantity` | number | 1 | 1.000 | 1.000 | 1.000 |
|
| 39 |
+
| `line_items[2].total` | money | 1 | 1.000 | 1.000 | 1.000 |
|
| 40 |
+
| `line_items[2].unit_price` | money | 1 | 0.000 | 0.000 | 0.000 |
|
evaluation/benchmarks/20260705T064740Z/gpt-5_minimal_sroie/receipt_gpt-5_re-minimal_per_record.csv
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
doc_id,field,field_type,predicted,truth,outcome,score,latency_ms,cost_usd
|
| 2 |
+
sroie_sample_001,currency,exact,SGD,SGD,TP,1.0,7563.0,0.01218
|
| 3 |
+
sroie_sample_001,line_items[],number,0,0,TP,1.0,7563.0,0.01218
|
| 4 |
+
sroie_sample_001,merchant,text,TAN WOON YANN,TAN WOON YANN,TP,1.0,7563.0,0.01218
|
| 5 |
+
sroie_sample_001,merchant_address.city,text,JOHOR BAHRU,,FP,0.0,7563.0,0.01218
|
| 6 |
+
sroie_sample_001,merchant_address.country,exact,MY,,FP,0.0,7563.0,0.01218
|
| 7 |
+
sroie_sample_001,merchant_address.line1,text,"789 KING STREET, TAMAN DAYA","789 KING STREET, TAMAN DAYA, 81100 JOHOR BAHRU",TP,0.898,7563.0,0.01218
|
| 8 |
+
sroie_sample_001,merchant_address.postal_code,exact,81100,,FP,0.0,7563.0,0.01218
|
| 9 |
+
sroie_sample_001,total,money,72,72,TP,1.0,7563.0,0.01218
|
| 10 |
+
sroie_sample_001,transaction_date,date,2018-06-25,2018-06-25,TP,1.0,7563.0,0.01218
|
| 11 |
+
sroie_sample_002,currency,exact,SGD,SGD,TP,1.0,5417.4,0.011383
|
| 12 |
+
sroie_sample_002,line_items[],number,0,0,TP,1.0,5417.4,0.011383
|
| 13 |
+
sroie_sample_002,merchant,text,SANYU STATIONERY SHOP,SANYU STATIONERY SHOP,TP,1.0,5417.4,0.011383
|
| 14 |
+
sroie_sample_002,merchant_address.city,text,SHAH ALAM,,FP,0.0,5417.4,0.011383
|
| 15 |
+
sroie_sample_002,merchant_address.line1,text,"NO. 31G&33G, JALAN SETIA INDAH X, U13/X","NO. 31G&33G, JALAN SETIA INDAH X, U13/X 40170 SHAH ALAM",TP,1.0,5417.4,0.011383
|
| 16 |
+
sroie_sample_002,merchant_address.postal_code,exact,40170,,FP,0.0,5417.4,0.011383
|
| 17 |
+
sroie_sample_002,total,money,16.3,16.3,TP,1.0,5417.4,0.011383
|
| 18 |
+
sroie_sample_002,transaction_date,date,2018-02-19,2018-02-19,TP,1.0,5417.4,0.011383
|
| 19 |
+
sroie_sample_003,currency,exact,SGD,SGD,TP,1.0,4327.8,0.01083
|
| 20 |
+
sroie_sample_003,line_items[],number,0,0,TP,1.0,4327.8,0.01083
|
| 21 |
+
sroie_sample_003,merchant,text,KEDAI PAPAN YEW CHUAN,KEDAI PAPAN YEW CHUAN,TP,1.0,4327.8,0.01083
|
| 22 |
+
sroie_sample_003,merchant_address.city,text,DENGKIL,,FP,0.0,4327.8,0.01083
|
| 23 |
+
sroie_sample_003,merchant_address.line1,text,LOT 276 JALAN BANTING,"LOT 276 JALAN BANTING, 43800 DENGKIL, SELANGOR",MISMATCH,0.765,4327.8,0.01083
|
| 24 |
+
sroie_sample_003,merchant_address.postal_code,exact,43800,,FP,0.0,4327.8,0.01083
|
| 25 |
+
sroie_sample_003,merchant_address.region,text,SELANGOR,,FP,0.0,4327.8,0.01083
|
| 26 |
+
sroie_sample_003,total,money,110,110,TP,1.0,4327.8,0.01083
|
| 27 |
+
sroie_sample_003,transaction_date,date,2018-05-10,2018-05-10,TP,1.0,4327.8,0.01083
|
| 28 |
+
sroie_sample_004,currency,exact,SGD,SGD,TP,1.0,4916.9,0.01103
|
| 29 |
+
sroie_sample_004,line_items[],number,0,0,TP,1.0,4916.9,0.01103
|
| 30 |
+
sroie_sample_004,merchant,text,OJC MARKETING SDN BHD,OJC MARKETING SDN BHD,TP,1.0,4916.9,0.01103
|
| 31 |
+
sroie_sample_004,merchant_address.city,text,MASAI,,FP,0.0,4916.9,0.01103
|
| 32 |
+
sroie_sample_004,merchant_address.country,exact,MY,,FP,0.0,4916.9,0.01103
|
| 33 |
+
sroie_sample_004,merchant_address.line1,text,"NO 2 & 4, JALAN BAYU 4, BANDAR SERI ALAM","NO 2 & 4, JALAN BAYU 4, BANDAR SERI ALAM, 81750 MASAI",TP,0.928,4916.9,0.01103
|
| 34 |
+
sroie_sample_004,merchant_address.postal_code,exact,81750,,FP,0.0,4916.9,0.01103
|
| 35 |
+
sroie_sample_004,total,money,48.15,48.15,TP,1.0,4916.9,0.01103
|
| 36 |
+
sroie_sample_004,transaction_date,date,2018-04-17,2018-04-17,TP,1.0,4916.9,0.01103
|
| 37 |
+
sroie_sample_005,currency,exact,SGD,SGD,TP,1.0,5441.7,0.010953
|
| 38 |
+
sroie_sample_005,line_items[],number,0,0,TP,1.0,5441.7,0.010953
|
| 39 |
+
sroie_sample_005,merchant,text,AEON CO. (M) BHD,AEON CO. (M) BHD,TP,1.0,5441.7,0.010953
|
| 40 |
+
sroie_sample_005,merchant_address.country,exact,MY,,FP,0.0,5441.7,0.010953
|
| 41 |
+
sroie_sample_005,merchant_address.line1,text,"3RD FLR, AEON TAMAN MALURI SHOPPING CENTRE","3RD FLR, AEON TAMAN MALURI SHOPPING CENTRE",TP,1.0,5441.7,0.010953
|
| 42 |
+
sroie_sample_005,total,money,39.2,39.2,TP,1.0,5441.7,0.010953
|
| 43 |
+
sroie_sample_005,transaction_date,date,2018-11-30,2018-11-30,TP,1.0,5441.7,0.010953
|
evaluation/benchmarks/20260705T064740Z/gpt-5_minimal_sroie/receipt_gpt-5_re-minimal_summary.json
ADDED
|
@@ -0,0 +1,240 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"generated_at": "2026-07-05T06:50:10.976416+00:00",
|
| 3 |
+
"summary": {
|
| 4 |
+
"model": "gpt-5_re-minimal",
|
| 5 |
+
"doc_type": "receipt",
|
| 6 |
+
"n_docs": 5,
|
| 7 |
+
"errors": 0,
|
| 8 |
+
"micro_f1": 0.8056,
|
| 9 |
+
"macro_f1": 0.9667,
|
| 10 |
+
"doc_exact_match": 0.0,
|
| 11 |
+
"mean_latency_ms": 5533.4,
|
| 12 |
+
"mean_cost_usd": 0.011275,
|
| 13 |
+
"total_cost_usd": 0.0564,
|
| 14 |
+
"wall_time_s": 27.67
|
| 15 |
+
},
|
| 16 |
+
"aggregate": {
|
| 17 |
+
"micro_precision": 0.6905,
|
| 18 |
+
"micro_recall": 0.9667,
|
| 19 |
+
"micro_f1": 0.8056,
|
| 20 |
+
"macro_f1": 0.9667
|
| 21 |
+
},
|
| 22 |
+
"field_stats": {
|
| 23 |
+
"currency": {
|
| 24 |
+
"field": "currency",
|
| 25 |
+
"field_type": "exact",
|
| 26 |
+
"tp": 5,
|
| 27 |
+
"fp": 0,
|
| 28 |
+
"fn": 0,
|
| 29 |
+
"tn": 0,
|
| 30 |
+
"support": 5,
|
| 31 |
+
"precision": 1.0,
|
| 32 |
+
"recall": 1.0,
|
| 33 |
+
"f1": 1.0
|
| 34 |
+
},
|
| 35 |
+
"line_items[]": {
|
| 36 |
+
"field": "line_items[]",
|
| 37 |
+
"field_type": "number",
|
| 38 |
+
"tp": 5,
|
| 39 |
+
"fp": 0,
|
| 40 |
+
"fn": 0,
|
| 41 |
+
"tn": 0,
|
| 42 |
+
"support": 5,
|
| 43 |
+
"precision": 1.0,
|
| 44 |
+
"recall": 1.0,
|
| 45 |
+
"f1": 1.0
|
| 46 |
+
},
|
| 47 |
+
"merchant": {
|
| 48 |
+
"field": "merchant",
|
| 49 |
+
"field_type": "text",
|
| 50 |
+
"tp": 5,
|
| 51 |
+
"fp": 0,
|
| 52 |
+
"fn": 0,
|
| 53 |
+
"tn": 0,
|
| 54 |
+
"support": 5,
|
| 55 |
+
"precision": 1.0,
|
| 56 |
+
"recall": 1.0,
|
| 57 |
+
"f1": 1.0
|
| 58 |
+
},
|
| 59 |
+
"merchant_address.city": {
|
| 60 |
+
"field": "merchant_address.city",
|
| 61 |
+
"field_type": "text",
|
| 62 |
+
"tp": 0,
|
| 63 |
+
"fp": 4,
|
| 64 |
+
"fn": 0,
|
| 65 |
+
"tn": 1,
|
| 66 |
+
"support": 0,
|
| 67 |
+
"precision": 0.0,
|
| 68 |
+
"recall": 0.0,
|
| 69 |
+
"f1": 0.0
|
| 70 |
+
},
|
| 71 |
+
"merchant_address.country": {
|
| 72 |
+
"field": "merchant_address.country",
|
| 73 |
+
"field_type": "exact",
|
| 74 |
+
"tp": 0,
|
| 75 |
+
"fp": 3,
|
| 76 |
+
"fn": 0,
|
| 77 |
+
"tn": 2,
|
| 78 |
+
"support": 0,
|
| 79 |
+
"precision": 0.0,
|
| 80 |
+
"recall": 0.0,
|
| 81 |
+
"f1": 0.0
|
| 82 |
+
},
|
| 83 |
+
"merchant_address.line1": {
|
| 84 |
+
"field": "merchant_address.line1",
|
| 85 |
+
"field_type": "text",
|
| 86 |
+
"tp": 4,
|
| 87 |
+
"fp": 1,
|
| 88 |
+
"fn": 1,
|
| 89 |
+
"tn": 0,
|
| 90 |
+
"support": 5,
|
| 91 |
+
"precision": 0.8,
|
| 92 |
+
"recall": 0.8,
|
| 93 |
+
"f1": 0.8
|
| 94 |
+
},
|
| 95 |
+
"merchant_address.line2": {
|
| 96 |
+
"field": "merchant_address.line2",
|
| 97 |
+
"field_type": "text",
|
| 98 |
+
"tp": 0,
|
| 99 |
+
"fp": 0,
|
| 100 |
+
"fn": 0,
|
| 101 |
+
"tn": 5,
|
| 102 |
+
"support": 0,
|
| 103 |
+
"precision": 0.0,
|
| 104 |
+
"recall": 0.0,
|
| 105 |
+
"f1": 0.0
|
| 106 |
+
},
|
| 107 |
+
"merchant_address.postal_code": {
|
| 108 |
+
"field": "merchant_address.postal_code",
|
| 109 |
+
"field_type": "exact",
|
| 110 |
+
"tp": 0,
|
| 111 |
+
"fp": 4,
|
| 112 |
+
"fn": 0,
|
| 113 |
+
"tn": 1,
|
| 114 |
+
"support": 0,
|
| 115 |
+
"precision": 0.0,
|
| 116 |
+
"recall": 0.0,
|
| 117 |
+
"f1": 0.0
|
| 118 |
+
},
|
| 119 |
+
"merchant_address.region": {
|
| 120 |
+
"field": "merchant_address.region",
|
| 121 |
+
"field_type": "text",
|
| 122 |
+
"tp": 0,
|
| 123 |
+
"fp": 1,
|
| 124 |
+
"fn": 0,
|
| 125 |
+
"tn": 4,
|
| 126 |
+
"support": 0,
|
| 127 |
+
"precision": 0.0,
|
| 128 |
+
"recall": 0.0,
|
| 129 |
+
"f1": 0.0
|
| 130 |
+
},
|
| 131 |
+
"merchant_phone": {
|
| 132 |
+
"field": "merchant_phone",
|
| 133 |
+
"field_type": "exact",
|
| 134 |
+
"tp": 0,
|
| 135 |
+
"fp": 0,
|
| 136 |
+
"fn": 0,
|
| 137 |
+
"tn": 5,
|
| 138 |
+
"support": 0,
|
| 139 |
+
"precision": 0.0,
|
| 140 |
+
"recall": 0.0,
|
| 141 |
+
"f1": 0.0
|
| 142 |
+
},
|
| 143 |
+
"payment_method": {
|
| 144 |
+
"field": "payment_method",
|
| 145 |
+
"field_type": "exact",
|
| 146 |
+
"tp": 0,
|
| 147 |
+
"fp": 0,
|
| 148 |
+
"fn": 0,
|
| 149 |
+
"tn": 5,
|
| 150 |
+
"support": 0,
|
| 151 |
+
"precision": 0.0,
|
| 152 |
+
"recall": 0.0,
|
| 153 |
+
"f1": 0.0
|
| 154 |
+
},
|
| 155 |
+
"receipt_number": {
|
| 156 |
+
"field": "receipt_number",
|
| 157 |
+
"field_type": "exact",
|
| 158 |
+
"tp": 0,
|
| 159 |
+
"fp": 0,
|
| 160 |
+
"fn": 0,
|
| 161 |
+
"tn": 5,
|
| 162 |
+
"support": 0,
|
| 163 |
+
"precision": 0.0,
|
| 164 |
+
"recall": 0.0,
|
| 165 |
+
"f1": 0.0
|
| 166 |
+
},
|
| 167 |
+
"subtotal": {
|
| 168 |
+
"field": "subtotal",
|
| 169 |
+
"field_type": "money",
|
| 170 |
+
"tp": 0,
|
| 171 |
+
"fp": 0,
|
| 172 |
+
"fn": 0,
|
| 173 |
+
"tn": 5,
|
| 174 |
+
"support": 0,
|
| 175 |
+
"precision": 0.0,
|
| 176 |
+
"recall": 0.0,
|
| 177 |
+
"f1": 0.0
|
| 178 |
+
},
|
| 179 |
+
"tax": {
|
| 180 |
+
"field": "tax",
|
| 181 |
+
"field_type": "money",
|
| 182 |
+
"tp": 0,
|
| 183 |
+
"fp": 0,
|
| 184 |
+
"fn": 0,
|
| 185 |
+
"tn": 5,
|
| 186 |
+
"support": 0,
|
| 187 |
+
"precision": 0.0,
|
| 188 |
+
"recall": 0.0,
|
| 189 |
+
"f1": 0.0
|
| 190 |
+
},
|
| 191 |
+
"tip": {
|
| 192 |
+
"field": "tip",
|
| 193 |
+
"field_type": "money",
|
| 194 |
+
"tp": 0,
|
| 195 |
+
"fp": 0,
|
| 196 |
+
"fn": 0,
|
| 197 |
+
"tn": 5,
|
| 198 |
+
"support": 0,
|
| 199 |
+
"precision": 0.0,
|
| 200 |
+
"recall": 0.0,
|
| 201 |
+
"f1": 0.0
|
| 202 |
+
},
|
| 203 |
+
"total": {
|
| 204 |
+
"field": "total",
|
| 205 |
+
"field_type": "money",
|
| 206 |
+
"tp": 5,
|
| 207 |
+
"fp": 0,
|
| 208 |
+
"fn": 0,
|
| 209 |
+
"tn": 0,
|
| 210 |
+
"support": 5,
|
| 211 |
+
"precision": 1.0,
|
| 212 |
+
"recall": 1.0,
|
| 213 |
+
"f1": 1.0
|
| 214 |
+
},
|
| 215 |
+
"transaction_date": {
|
| 216 |
+
"field": "transaction_date",
|
| 217 |
+
"field_type": "date",
|
| 218 |
+
"tp": 5,
|
| 219 |
+
"fp": 0,
|
| 220 |
+
"fn": 0,
|
| 221 |
+
"tn": 0,
|
| 222 |
+
"support": 5,
|
| 223 |
+
"precision": 1.0,
|
| 224 |
+
"recall": 1.0,
|
| 225 |
+
"f1": 1.0
|
| 226 |
+
},
|
| 227 |
+
"transaction_time": {
|
| 228 |
+
"field": "transaction_time",
|
| 229 |
+
"field_type": "time",
|
| 230 |
+
"tp": 0,
|
| 231 |
+
"fp": 0,
|
| 232 |
+
"fn": 0,
|
| 233 |
+
"tn": 5,
|
| 234 |
+
"support": 0,
|
| 235 |
+
"precision": 0.0,
|
| 236 |
+
"recall": 0.0,
|
| 237 |
+
"f1": 0.0
|
| 238 |
+
}
|
| 239 |
+
}
|
| 240 |
+
}
|
evaluation/benchmarks/20260705T064740Z/gpt-5_minimal_sroie/receipt_gpt-5_re-minimal_summary.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Evaluation Report β `receipt` on `gpt-5_re-minimal`
|
| 2 |
+
|
| 3 |
+
_Generated: 2026-07-05T06:50:10+00:00_
|
| 4 |
+
|
| 5 |
+
## Headline
|
| 6 |
+
|
| 7 |
+
| Metric | Value |
|
| 8 |
+
|---|---|
|
| 9 |
+
| Documents evaluated | 5 |
|
| 10 |
+
| Extractor errors | 0 |
|
| 11 |
+
| **Micro F1** | **0.8056** |
|
| 12 |
+
| **Macro F1** | **0.9667** |
|
| 13 |
+
| Doc exact-match rate| 0.00% |
|
| 14 |
+
| Mean latency | 5533 ms |
|
| 15 |
+
| Mean cost / doc | $0.011275 |
|
| 16 |
+
| Total cost | $0.0564 |
|
| 17 |
+
| Wall time | 27.67 s |
|
| 18 |
+
|
| 19 |
+
## Per-field performance
|
| 20 |
+
|
| 21 |
+
| Field | Type | Support | Precision | Recall | F1 |
|
| 22 |
+
|---|---|---:|---:|---:|---:|
|
| 23 |
+
| `currency` | exact | 5 | 1.000 | 1.000 | 1.000 |
|
| 24 |
+
| `line_items[]` | number | 5 | 1.000 | 1.000 | 1.000 |
|
| 25 |
+
| `merchant` | text | 5 | 1.000 | 1.000 | 1.000 |
|
| 26 |
+
| `total` | money | 5 | 1.000 | 1.000 | 1.000 |
|
| 27 |
+
| `transaction_date` | date | 5 | 1.000 | 1.000 | 1.000 |
|
| 28 |
+
| `merchant_address.line1` | text | 5 | 0.800 | 0.800 | 0.800 |
|
| 29 |
+
| `merchant_address.city` | text | 0 | 0.000 | 0.000 | 0.000 |
|
| 30 |
+
| `merchant_address.country` | exact | 0 | 0.000 | 0.000 | 0.000 |
|
| 31 |
+
| `merchant_address.postal_code` | exact | 0 | 0.000 | 0.000 | 0.000 |
|
| 32 |
+
| `merchant_address.region` | text | 0 | 0.000 | 0.000 | 0.000 |
|
scripts/run_multimodel_benchmark.py
ADDED
|
@@ -0,0 +1,213 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Run the same evaluation across several models + write a comparison table.
|
| 2 |
+
|
| 3 |
+
Baseline is gpt-5-nano @ minimal effort (already validated on 2026-07-04).
|
| 4 |
+
This script sweeps a small matrix of (model, reasoning_effort) combos over
|
| 5 |
+
the committed smoke datasets (5 SROIE + 5 CORD receipts) and produces:
|
| 6 |
+
|
| 7 |
+
evaluation/benchmarks/<UTC-timestamp>/comparison.json
|
| 8 |
+
evaluation/benchmarks/<UTC-timestamp>/comparison.csv
|
| 9 |
+
evaluation/benchmarks/<UTC-timestamp>/comparison.md
|
| 10 |
+
|
| 11 |
+
The markdown table drops straight into the README.
|
| 12 |
+
|
| 13 |
+
Usage
|
| 14 |
+
-----
|
| 15 |
+
# Default matrix (gpt-5 nano/mini/full @ minimal)
|
| 16 |
+
python scripts/run_multimodel_benchmark.py
|
| 17 |
+
|
| 18 |
+
# Custom matrix: pass any number of MODEL[:effort] specs
|
| 19 |
+
python scripts/run_multimodel_benchmark.py gpt-5-nano:minimal gpt-4o-mini
|
| 20 |
+
|
| 21 |
+
# Dry-run to check what would fire without hitting the API
|
| 22 |
+
python scripts/run_multimodel_benchmark.py --dry-run
|
| 23 |
+
"""
|
| 24 |
+
from __future__ import annotations
|
| 25 |
+
|
| 26 |
+
import argparse
|
| 27 |
+
import csv
|
| 28 |
+
import json
|
| 29 |
+
import subprocess
|
| 30 |
+
import sys
|
| 31 |
+
from dataclasses import dataclass
|
| 32 |
+
from datetime import datetime, timezone
|
| 33 |
+
from pathlib import Path
|
| 34 |
+
|
| 35 |
+
ROOT = Path(__file__).resolve().parents[1]
|
| 36 |
+
DATASETS = [
|
| 37 |
+
("receipt", ROOT / "evaluation" / "smoke_sroie_sample.jsonl", "sroie"),
|
| 38 |
+
("receipt", ROOT / "evaluation" / "smoke_cord_sample.jsonl", "cord"),
|
| 39 |
+
]
|
| 40 |
+
|
| 41 |
+
DEFAULT_MATRIX = [
|
| 42 |
+
("gpt-5-nano", "minimal"),
|
| 43 |
+
("gpt-5-mini", "minimal"),
|
| 44 |
+
("gpt-5", "minimal"),
|
| 45 |
+
]
|
| 46 |
+
|
| 47 |
+
|
| 48 |
+
@dataclass
|
| 49 |
+
class Combo:
|
| 50 |
+
model: str
|
| 51 |
+
effort: str | None
|
| 52 |
+
|
| 53 |
+
@property
|
| 54 |
+
def label(self) -> str:
|
| 55 |
+
return f"{self.model}" + (f"@{self.effort}" if self.effort else "")
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
def parse_spec(spec: str) -> Combo:
|
| 59 |
+
if ":" in spec:
|
| 60 |
+
m, e = spec.split(":", 1)
|
| 61 |
+
return Combo(model=m.strip(), effort=e.strip() or None)
|
| 62 |
+
return Combo(model=spec.strip(), effort=None)
|
| 63 |
+
|
| 64 |
+
|
| 65 |
+
def run_one_eval(combo: Combo, doc_type: str, dataset: Path, out_dir: Path) -> dict:
|
| 66 |
+
"""Fire the eval CLI for one (combo, dataset) and load the JSON summary."""
|
| 67 |
+
cmd = [
|
| 68 |
+
sys.executable, "-m", "src.eval.cli",
|
| 69 |
+
"--dataset", str(dataset),
|
| 70 |
+
"--doc-type", doc_type,
|
| 71 |
+
"--mode", "live",
|
| 72 |
+
"--model", combo.model,
|
| 73 |
+
"--output-dir", str(out_dir),
|
| 74 |
+
]
|
| 75 |
+
if combo.effort:
|
| 76 |
+
cmd += ["--reasoning-effort", combo.effort]
|
| 77 |
+
|
| 78 |
+
print(f" $ {' '.join(cmd)}", flush=True)
|
| 79 |
+
r = subprocess.run(cmd, cwd=ROOT, capture_output=True, text=True)
|
| 80 |
+
if r.returncode != 0:
|
| 81 |
+
print(r.stdout)
|
| 82 |
+
print(r.stderr, file=sys.stderr)
|
| 83 |
+
raise SystemExit(f"eval CLI failed: rc={r.returncode}")
|
| 84 |
+
|
| 85 |
+
# Find the summary JSON just written (there's exactly one _summary.json per run).
|
| 86 |
+
matches = sorted(out_dir.glob("*_summary.json"))
|
| 87 |
+
if not matches:
|
| 88 |
+
raise RuntimeError(f"no summary.json in {out_dir}")
|
| 89 |
+
with matches[-1].open() as f:
|
| 90 |
+
return json.load(f)["summary"]
|
| 91 |
+
|
| 92 |
+
|
| 93 |
+
def aggregate(rows: list[dict]) -> dict:
|
| 94 |
+
"""Weighted aggregate of per-dataset runs into one row per (model, effort)."""
|
| 95 |
+
n = sum(r["n_docs"] for r in rows)
|
| 96 |
+
if n == 0:
|
| 97 |
+
return {}
|
| 98 |
+
def w(k): return sum(r[k] * r["n_docs"] for r in rows) / n
|
| 99 |
+
return {
|
| 100 |
+
"n_docs": n,
|
| 101 |
+
"errors": sum(r["errors"] for r in rows),
|
| 102 |
+
"micro_f1": round(w("micro_f1"), 4),
|
| 103 |
+
"macro_f1": round(w("macro_f1"), 4),
|
| 104 |
+
"doc_exact_match": round(w("doc_exact_match"), 4),
|
| 105 |
+
"mean_latency_ms": round(w("mean_latency_ms"), 0),
|
| 106 |
+
"mean_cost_usd": round(w("mean_cost_usd"), 6),
|
| 107 |
+
"total_cost_usd": round(sum(r["total_cost_usd"] for r in rows), 4),
|
| 108 |
+
"wall_time_s": round(sum(r["wall_time_s"] for r in rows), 2),
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
|
| 112 |
+
def write_markdown(combos: list[Combo], results: dict[str, dict], out: Path) -> Path:
|
| 113 |
+
lines = [
|
| 114 |
+
"# Multi-model benchmark",
|
| 115 |
+
"",
|
| 116 |
+
f"_Generated: {datetime.now(timezone.utc).isoformat(timespec='seconds')}_",
|
| 117 |
+
"",
|
| 118 |
+
"10 receipts (5 SROIE + 5 CORD), synthetic text derived from public ground truth.",
|
| 119 |
+
"All runs use the same prompts, schemas, and post-processing β the only variable is the model.",
|
| 120 |
+
"",
|
| 121 |
+
"| Model | Effort | Micro F1 | Macro F1 | Doc-exact | Latency (ms) | Cost / doc | Total cost |",
|
| 122 |
+
"|---|---|---:|---:|---:|---:|---:|---:|",
|
| 123 |
+
]
|
| 124 |
+
for c in combos:
|
| 125 |
+
r = results.get(c.label)
|
| 126 |
+
if not r:
|
| 127 |
+
lines.append(f"| `{c.model}` | {c.effort or 'β'} | β | β | β | β | β | β |")
|
| 128 |
+
continue
|
| 129 |
+
lines.append(
|
| 130 |
+
f"| `{c.model}` | {c.effort or 'β'} | "
|
| 131 |
+
f"{r['micro_f1']:.3f} | {r['macro_f1']:.3f} | {r['doc_exact_match']:.0%} | "
|
| 132 |
+
f"{r['mean_latency_ms']:.0f} | ${r['mean_cost_usd']:.5f} | ${r['total_cost_usd']:.4f} |"
|
| 133 |
+
)
|
| 134 |
+
lines.append("")
|
| 135 |
+
lines.append("_Field-level breakdowns live in each combo's per-run report under `evaluation/reports/`._")
|
| 136 |
+
out.write_text("\n".join(lines), encoding="utf-8")
|
| 137 |
+
return out
|
| 138 |
+
|
| 139 |
+
|
| 140 |
+
def write_csv(combos: list[Combo], results: dict[str, dict], out: Path) -> Path:
|
| 141 |
+
fields = ["model", "reasoning_effort", "micro_f1", "macro_f1", "doc_exact_match",
|
| 142 |
+
"mean_latency_ms", "mean_cost_usd", "total_cost_usd", "wall_time_s", "n_docs", "errors"]
|
| 143 |
+
with out.open("w", newline="") as f:
|
| 144 |
+
w = csv.DictWriter(f, fieldnames=fields)
|
| 145 |
+
w.writeheader()
|
| 146 |
+
for c in combos:
|
| 147 |
+
r = results.get(c.label, {})
|
| 148 |
+
row = {"model": c.model, "reasoning_effort": c.effort or ""}
|
| 149 |
+
row.update({k: r.get(k, "") for k in fields[2:]})
|
| 150 |
+
w.writerow(row)
|
| 151 |
+
return out
|
| 152 |
+
|
| 153 |
+
|
| 154 |
+
def main(argv: list[str] | None = None) -> int:
|
| 155 |
+
ap = argparse.ArgumentParser(description=__doc__)
|
| 156 |
+
ap.add_argument("specs", nargs="*", help="Optional model specs (model[:effort]).")
|
| 157 |
+
ap.add_argument("--dry-run", action="store_true", help="Print matrix + exit.")
|
| 158 |
+
args = ap.parse_args(argv)
|
| 159 |
+
|
| 160 |
+
combos = [parse_spec(s) for s in args.specs] if args.specs else [Combo(m, e) for m, e in DEFAULT_MATRIX]
|
| 161 |
+
|
| 162 |
+
stamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
|
| 163 |
+
bench_root = ROOT / "evaluation" / "benchmarks" / stamp
|
| 164 |
+
bench_root.mkdir(parents=True, exist_ok=True)
|
| 165 |
+
|
| 166 |
+
print(f"Benchmark run: {bench_root}")
|
| 167 |
+
print("Matrix:")
|
| 168 |
+
for c in combos:
|
| 169 |
+
print(f" - {c.label}")
|
| 170 |
+
print(f"Datasets: {len(DATASETS)} ({sum(1 for _ in DATASETS)} runs per model)")
|
| 171 |
+
if args.dry_run:
|
| 172 |
+
return 0
|
| 173 |
+
|
| 174 |
+
# Sanity-check: OPENAI_API_KEY must be set (dotenv is loaded by src.utils.config).
|
| 175 |
+
from dotenv import dotenv_values
|
| 176 |
+
env_file = ROOT / ".env"
|
| 177 |
+
if not env_file.exists():
|
| 178 |
+
print("ERROR: .env not found β add OPENAI_API_KEY there or export it.", file=sys.stderr)
|
| 179 |
+
return 2
|
| 180 |
+
if not (dotenv_values(env_file).get("OPENAI_API_KEY") or "").strip():
|
| 181 |
+
print("ERROR: OPENAI_API_KEY missing/blank in .env", file=sys.stderr)
|
| 182 |
+
return 2
|
| 183 |
+
|
| 184 |
+
results: dict[str, dict] = {}
|
| 185 |
+
for c in combos:
|
| 186 |
+
print(f"\n=== {c.label} ===")
|
| 187 |
+
per_dataset: list[dict] = []
|
| 188 |
+
for doc_type, dataset, tag in DATASETS:
|
| 189 |
+
run_dir = bench_root / f"{c.model.replace('/', '_')}_{c.effort or 'default'}_{tag}"
|
| 190 |
+
run_dir.mkdir(parents=True, exist_ok=True)
|
| 191 |
+
summary = run_one_eval(c, doc_type, dataset, run_dir)
|
| 192 |
+
per_dataset.append(summary)
|
| 193 |
+
print(f" [{tag}] micro_f1={summary['micro_f1']:.3f} "
|
| 194 |
+
f"cost/doc=${summary['mean_cost_usd']:.5f} "
|
| 195 |
+
f"lat={summary['mean_latency_ms']:.0f}ms")
|
| 196 |
+
results[c.label] = aggregate(per_dataset)
|
| 197 |
+
|
| 198 |
+
# Emit the three roll-up files.
|
| 199 |
+
(bench_root / "comparison.json").write_text(json.dumps(
|
| 200 |
+
{"generated_at": datetime.now(timezone.utc).isoformat(),
|
| 201 |
+
"matrix": [{"model": c.model, "reasoning_effort": c.effort} for c in combos],
|
| 202 |
+
"results": results},
|
| 203 |
+
indent=2))
|
| 204 |
+
write_csv(combos, results, bench_root / "comparison.csv")
|
| 205 |
+
write_markdown(combos, results, bench_root / "comparison.md")
|
| 206 |
+
|
| 207 |
+
print(f"\nDone. Comparison written to {bench_root}/comparison.{{json,csv,md}}")
|
| 208 |
+
print("\n" + (bench_root / "comparison.md").read_text())
|
| 209 |
+
return 0
|
| 210 |
+
|
| 211 |
+
|
| 212 |
+
if __name__ == "__main__":
|
| 213 |
+
raise SystemExit(main())
|