fix(app_controller): lazy load rag_engine to avoid blocking startup

Before this change, app_controller imported rag_engine at module level which
pulled in chromadb (~0.45s). Now rag_engine is only imported when RAG is
actually enabled and needed. This improves startup time significantly.
This commit is contained in:
2026-05-13 15:28:41 -04:00
parent db69e3cb8c
commit 7ba94d4a42
2 changed files with 68 additions and 5 deletions
+10 -5
View File
@@ -28,7 +28,6 @@ from src import orchestrator_pm
from src import paths
from src import performance_monitor
from src import project_manager
from src import rag_engine
from src import session_logger
from src import workspace_manager
from src import presets
@@ -225,7 +224,7 @@ class AppController:
self.mcp_config: models.MCPConfiguration = models.MCPConfiguration()
self.view_presets: list[models.NamedViewPreset] = []
self.rag_config: Optional[models.RAGConfig] = None
self.rag_engine: Optional[rag_engine.RAGEngine] = None
self.rag_engine: Optional[Any] = None
self.rag_status: str = 'idle'
# AI settings state
self._current_provider: str = "gemini"
@@ -571,6 +570,7 @@ class AppController:
def rag_enabled(self, value: bool) -> None:
if self.rag_config:
self.rag_config.enabled = value
from src import rag_engine
self.rag_engine = rag_engine.RAGEngine(self.rag_config, self.active_project_root)
@property
@@ -580,6 +580,7 @@ class AppController:
def rag_source(self, value: str) -> None:
if self.rag_config:
self.rag_config.vector_store.provider = value
from src import rag_engine
if self.rag_engine: self.rag_engine = rag_engine.RAGEngine(self.rag_config, self.active_project_root)
@property
@@ -589,6 +590,7 @@ class AppController:
def rag_emb_provider(self, value: str) -> None:
if self.rag_config:
self.rag_config.embedding_provider = value
from src import rag_engine
if self.rag_engine: self.rag_engine = rag_engine.RAGEngine(self.rag_config, self.active_project_root)
@property
@@ -1230,9 +1232,12 @@ class AppController:
else:
self.rag_config = models.RAGConfig()
self.rag_engine = rag_engine.RAGEngine(self.rag_config, self.active_project_root)
if self.rag_config.enabled and self.rag_engine.is_empty():
self._rebuild_rag_index()
self.rag_engine = None
if self.rag_config.enabled:
from src import rag_engine
self.rag_engine = rag_engine.RAGEngine(self.rag_config, self.active_project_root)
if self.rag_engine.is_empty():
self._rebuild_rag_index()
from src.personas import PersonaManager
self.persona_manager = PersonaManager(Path(self.active_project_path).parent if self.active_project_path else None)