From 1f77d7f0991d5ca6dd893329be13ecc7d0b8e9ee Mon Sep 17 00:00:00 2001 From: "Rodrigo Rodriguez (Pragmatismo)" Date: Mon, 13 Apr 2026 09:53:25 -0300 Subject: [PATCH] fix: skip KB re-indexing when kb_collections already has docs, prevents vector DB loop --- src/core/kb/mod.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/core/kb/mod.rs b/src/core/kb/mod.rs index 0e99772d..7cfe64de 100644 --- a/src/core/kb/mod.rs +++ b/src/core/kb/mod.rs @@ -172,6 +172,41 @@ impl KnowledgeBaseManager { kb_folder.display() ); + let kb_name = kb_folder + .file_name() + .and_then(|n| n.to_str()) + .unwrap_or("unknown"); + + #[derive(diesel::QueryableByName)] + struct KbDocCount { + #[diesel(sql_type = diesel::sql_types::Nullable)] + document_count: Option, + } + + if let Some(pool) = self.indexer.get_db_pool() { + if let Ok(mut conn) = pool.get() { + let existing: Option = diesel::sql_query( + "SELECT document_count FROM kb_collections WHERE bot_id = $1 AND name = $2" + ) + .bind::(bot_id) + .bind::(kb_name) + .get_result(&mut conn) + .ok(); + + if let Some(row) = existing { + if let Some(count) = row.document_count { + if count > 0 { + info!( + "KB {} for bot {}/{} already indexed with {} docs, skipping re-index", + kb_name, bot_name, bot_id, count + ); + return Ok(()); + } + } + } + } + } + let monitor = self.monitor.read().await; let result = monitor.process_gbkb_folder(bot_id, bot_name, kb_folder).await?;