Public scoring pack for one frozen Stacksift eval. The five-stage analyzer
is private. This repo is labels, frozen predictions, and a rescore script
with no API keys — the same shape as RAGNav committing squad_results.txt.
This freeze is ground truth for the site. It was one run. It was not repeated to improve the numbers.
Recorded in eval_results.json under freeze:
| Field | Value |
|---|---|
| Frozen at (UTC) | 2026-09-01T11:21:59Z |
| Run started (UTC) | 2026-09-01T10:47:37Z |
| Elapsed | 2062.2 s |
| Stacksift commit | a8b6cb960d5e869a84a79c3b0f498b9cfc6c5ad7 (a8b6cb9) |
| Working tree | dirty — eval status rule + Stage 1 serper_calls_total stamp were on disk, not in that commit |
| Extract model | gpt-4.1-mini |
| Verdict model | gpt-4.1 (uncompiled DSPy; no compiled module on disk) |
| Mode | full |
| Serper probe | GET /account balance > 0, then a live search, before domain 1 |
| Domains run / scored / excluded | 20 / 20 / 0 |
| Macro P / R / F1 | 0.7708 / 0.869 / 0.7954 |
| False positives / negatives | 15 / 18 |
| Metered cost | $1.0963 USD |
Dialpad on this freeze: precision 0.5, recall 0.6667, F1 0.5714. Support
and Sell matched; Meetings missed; predicted “Dialpad AI Agents” and bare
“Dialpad” tagged matches_known_not_product.
Every verified domain has status: scored and serper_calls_total > 0.
Nothing was dropped from the macro.
An earlier 2026-09-01 incident run (Serper HTTP 400, empty Stage 1) is not this file and is not a published score.
python3 rescore.pyThat command reads eval_labels.json and the frozen
predicted_products in eval_results.json, recomputes P/R/F1 with
score.py for status == "scored" only, and exits non-zero if
anything disagrees with the frozen file.
Only status == "scored" enters macro P/R/F1.
| Status | Meaning |
|---|---|
scored | Verified row, at least one successful Serper call, real analysis |
search_unavailable | Zero successful searches (credits / auth / outage) — listed, not averaged |
no_content | Search returned something; extract had no text |
error | Crash or LLM disabled |
unverified | Not in the labelled set |
This freeze: scored=20.
eval_labels.json labelled golden set (true_products / not_products)
eval_results.json freeze metadata + frozen predictions and scores
score.py matching and P/R/F1 (no analyzer import)
rescore.py re-score frozen predictions; no API keys
score.py is the scoring logic from Stacksift scripts/eval.py, without
the pipeline runner.
The five-stage analyzer, credentials, billing, or a way to regenerate predictions. Those stay in the private Stacksift source.