Index Dashboard Models
-
Storage Breakdown
DashboardIndexStorageBreakdownshows bytes across Postgres + Neo4j. -
Costs
DashboardIndexCostsestimates embedding, semantic KG, and figure-description costs. -
Embedding Config
DashboardEmbeddingConfigSummarysummarizes vector storage settings.
At-a-glance
Use dashboard stats to detect storage drift (e.g., pgvector index growth) and plan compaction windows.
Estimates
Some values (e.g., GIN/GIST index allocations) may be estimated when exact attribution is not possible.
Quotas
Track total storage vs. quotas per environment to avoid surprise outages.
| Model | Fields |
|---|---|
DashboardIndexStorageBreakdown | chunks_bytes, chunk_summaries_bytes, qdrant_points, qdrant_dense_vector_bytes, neo4j_store_bytes (nullable when unmeasured), neo4j_store_note, postgres_total_bytes, total_storage_bytes |
DashboardIndexCosts | total_tokens, embedding_cost, semantic_kg_cost, figure_description_cost, figures_described, total_cost, accounting (saved IndexRunAccounting for the live generation's run) |
DashboardIndexStatusResponse | lines, metadata, running, progress, current_file |
Costs are saved observations, never repriced
Every cost field now comes from the accounting saved with the live generation's index run (resolved through the corpus manifest, not the newest summary on disk): the frozen pre-run estimate the run captured under its own config, plus the reconciled native spend when reconciliation has settled. Current configuration never reprices a past run — change the embedding model and the card still shows what the live generation actually cost. A corpus with no manifest-named run reports null for every component, and a missing or unpriced component keeps the total unknown rather than counting as zero. The accounting block carries the full census (admitted/in-flight requests, retained workers, coverage and pricing states, reconciliation reasons). See Native run accounting.
An unmeasured store is null with a reason, never a measured-looking zero
Neo4j 5 Community exposes no store-size source — dbms.queryJmx is gone in Neo4j 5, APOC core has no apoc.monitor.store, SHOW DATABASES carries no size column, and the data volume is a root-owned Docker volume the API process cannot read. When no measurement source exists, neo4j_store_bytes is null with neo4j_store_note saying why, the store contributes nothing to total_storage_bytes, and both Dashboard panels render the tile as n/a instead of a measured-looking 0 B (0.0% of total) beside a graph of thousands of nodes.
flowchart LR
API["/index/stats"] --> UI["Dashboard Panels"] Metadata
DashboardIndexStatusMetadata.embedding_config aligns with the active embedding provider/model/dimensions.