Interactive overview of the ingested restaurant database
Click a bar to filter map + source. Ctrl+click (Cmd on Mac) to select multiple types.
Auto-filters when types are selected above.
Ctrl+click tabs to combine multiple types on the map.
Restaurants with the same normalized name within a single dataset (likely chains)
Same restaurant name appearing in multiple datasets
RFC-009 v3 end-to-end pipeline output — generate → TTS → STT. Per-conversation utterances + WER from base Nemotron.
No v3 conversations yet. Run the pipeline:
python scripts/seed_v3_demo.py
for a stub demo, or kick off
docker run … cong/pipeline-v3 --restaurant 2 --n 10
for the real Shokudo end-to-end.
RFC-013 §3.2 audio-integrity gate.
tts_audio_quality.verdict = 'fail' grouped by
(voice, accent, persona). Click a row to drill into failed utterances.
Groups with flag_rate are sorted DESC. Excludes utterances
without a T1 audit (run scripts/backfill_rfc013_t1.py --apply
to populate).
RFC-013 §3.5.1 Sonnet clustering output + §3.7.2 closure metric. Approve a proposal as standing-category (recurring pattern) or frozen-cohort (one-off cleanup) — standing approvals trigger immediate backfill against the active corpus.
Latest application per (utterance, stt_model) — re-runs and
rollback-then-reapply paths don't double-count. Bo's signal:
auto_standing_pct trending up means recurring
patterns are becoming automatic.
Effective drop_from_training + still-pending /
non-keep clusters. Effective keep_for_training ones
live on the Fine-tune Candidates tab (default: accept Sonnet's
suggestion — no action needed). Select rows for a bulk decision;
expand a row to audit up to 20 sample errors. Refresh the queue
by triggering the wer-proposal-audit skill.
▸) to spot-check the samples, then click
Approve-drop (N): it writes the drop
decision and those N are out of fine-tuning
immediately. One click — no agent, no CLI.→ rule PR to see
it). Approving means a code agent opens that one-line
_MORPH_EQUIV/_REPLACEMENTS PR
(needs test + re-backfill — can't be a click); it flips
fixed after merge.Reject = "real STT
error" → it stays a fine-tune candidate (done). A
forgiveness proposal is only done once it reaches
fixed (via Approve-drop, or the rule PR).canonical_term_stats keyed by
corpus_run_id (Fine-tune Candidates tab). A
rule fix doesn't move the numbers until
backfill_stt_metrics --reclassify-all +
compute_per_term_wer re-run against that
corpus_run_id. (An enumerated drop
needs no re-run — it excludes via the decision directly.)Default view = actionable only (pending + approved-forgiveness awaiting a fix). Tick Show all to also see rejected / approved-keep / fixed rows.
RFC-013 §3.7 per-canonical-term WER (formulation B). Top terms drive the May 13 fine-tune; click a row to drill into containing utterances. The allocation preview at the bottom combines WER severity with raw restaurant/menu frequency for RFC-019 planning.
Clusters whose effective training treatment is
keep_for_training (Sonnet's suggestion or an operator
override). These feed the fine-tune. Select rows to bulk-change a
decision (e.g. demote a cluster to drop); expand a
row to audit up to 20 sample errors. The per-term-WER snapshot +
allocation preview below are read-only.
A snapshot = canonical_term_stats keyed by
corpus_run_id. Recompute via
scripts/compute_per_term_wer.py --stt-model <m>
--corpus-run-id <tag> after each generation/STT run.
After a forgiveness rule change
(_MORPH_EQUIV / _REPLACEMENTS) the
numbers don't move until you re-run
backfill_stt_metrics --reclassify-all then
compute_per_term_wer against the
same corpus_run_id.
Server-side paginated for the selected snapshot (scales to the
full ~200k canonicals). Filter by per_term_wer range,
base_dish search, and dish_type;
min_occ (n_gt ≥) is a secondary
noise floor. Click a row to drill into its utterances.
RFC-019 planning view. Frequency comes from
canonical_term_stats → menu_item_algo_stage → menu_items →
restaurant_listings, not coverage_count. The
matrix and scatter explain the proposed K tiers; the table shows the
highest-priority rows to audit before generation.
RFC-014 §3.3 per-entity accuracy. Order-essential entities
(phone_number, address,
item_count, intent_verb) sit in the
priority-2 fine-tune tier; others (modifier, allergen, dietary,
pickup_time, payment_method, person_name) are tier-1.
hit = match in {exact, equivalent};
miss = match in {partial, missing}.
Click a row to drill into the misses for that type. Run
scripts/llm_entity_extract.py against the cloud DB
to populate.