feat(settings): add "Rebuild semantic index" maintenance action
Drops and recreates the sqlite-vec tables at the current model dimension, then re-queues every image for embedding. Fixes "dimension mismatch" search errors that occur when the vector table was built for a different model/dimension (e.g. after experimenting with 768-dim models against this 512-dim build). The rebuild runs under the embedding worker's DB write lock and resets the job queue inside a single transaction, so it can't interleave with an in-flight embedding batch (per code review).
This commit is contained in:
@@ -1987,6 +1987,14 @@ pub async fn vacuum_database(
|
||||
})
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn rebuild_semantic_index(db: State<'_, DbState>) -> Result<usize, String> {
|
||||
let conn = db.get().map_err(|e| e.to_string())?;
|
||||
// Serialize against the embedding worker (which writes under the same lock)
|
||||
// so the rebuild can't interleave with an in-flight embedding batch.
|
||||
indexer::with_db_write_lock(|| db::reset_all_embeddings(&conn)).map_err(|e| e.to_string())
|
||||
}
|
||||
|
||||
#[derive(serde::Serialize)]
|
||||
pub struct OrphanedThumbnailsInfo {
|
||||
pub count: u64,
|
||||
|
||||
Reference in New Issue
Block a user