Spaces:
Runtime error
Runtime error
| # src/app_initializer.py | |
| """Initialize all application components and dependencies.""" | |
| import os | |
| import logging | |
| from typing import Dict, Any | |
| from src.constants import ( | |
| DATA_DIR, PERSONAL_DIR, RUNBOOK_DIR, UPLOAD_DIR, | |
| SESSIONS_FILE, DEFAULT_HOST, OPENAI_API_KEY | |
| ) | |
| from src.memory import MemoryManager | |
| from services.memory.skills import SkillsManager | |
| from core.session_manager import SessionManager | |
| from core.models import set_session_manager | |
| from src.personal_docs import PersonalDocsManager | |
| from src.api_key_manager import APIKeyManager | |
| from src.preset_manager import PresetManager | |
| from src.chat_processor import ChatProcessor | |
| from src.model_discovery import ModelDiscovery | |
| from src.chat_handler import ChatHandler | |
| from src.research_handler import ResearchHandler | |
| from src.upload_handler import UploadHandler | |
| from src.search import update_search_config | |
| logger = logging.getLogger(__name__) | |
| def create_directories(): | |
| """Create necessary directories if they don't exist.""" | |
| for directory in (DATA_DIR, PERSONAL_DIR, RUNBOOK_DIR, UPLOAD_DIR): | |
| os.makedirs(directory, exist_ok=True) | |
| def initialize_managers(base_dir: str, rag_manager=None) -> Dict[str, Any]: | |
| """ | |
| Initialize all manager and handler instances. | |
| Args: | |
| base_dir: Base directory path | |
| rag_manager: RAG manager instance (optional) | |
| Returns: | |
| Dictionary containing all initialized components | |
| """ | |
| # Create directories first | |
| create_directories() | |
| # Initialize core managers | |
| memory_manager = MemoryManager(DATA_DIR) | |
| skills_manager = SkillsManager(DATA_DIR) | |
| session_manager = SessionManager(SESSIONS_FILE) | |
| set_session_manager(session_manager) # Enable Session.add_message() persistence | |
| upload_handler = UploadHandler(base_dir, UPLOAD_DIR) | |
| personal_docs_manager = PersonalDocsManager(PERSONAL_DIR, rag_manager) | |
| api_key_manager = APIKeyManager(DATA_DIR) | |
| preset_manager = PresetManager(DATA_DIR) | |
| # Initialize memory vector store (share embedding model with RAG if available) | |
| memory_vector = None | |
| try: | |
| from src.memory_vector import MemoryVectorStore | |
| embedding_model = getattr(rag_manager, '_model', None) if rag_manager else None | |
| memory_vector = MemoryVectorStore(DATA_DIR, embedding_model=embedding_model) | |
| if memory_vector.healthy: | |
| # Rebuild index from existing memories if empty | |
| if memory_vector.count() == 0: | |
| existing = memory_manager.load() | |
| if existing: | |
| memory_vector.rebuild(existing) | |
| logger.info(f"Rebuilt memory vector index from {len(existing)} existing entries") | |
| logger.info("MemoryVectorStore initialized") | |
| else: | |
| logger.warning("MemoryVectorStore DEGRADED: ChromaDB vector memory unavailable") | |
| memory_vector = None | |
| except Exception as e: | |
| logger.warning(f"MemoryVectorStore DEGRADED: {e}") | |
| memory_vector = None | |
| # Initialize processors | |
| chat_processor = ChatProcessor(memory_manager, personal_docs_manager, memory_vector=memory_vector, skills_manager=skills_manager) | |
| research_handler = ResearchHandler() | |
| # Initialize chat handler with all dependencies | |
| chat_handler = ChatHandler( | |
| session_manager=session_manager, | |
| memory_manager=memory_manager, | |
| chat_processor=chat_processor, | |
| research_handler=research_handler, | |
| preset_manager=preset_manager, | |
| upload_handler=upload_handler, | |
| ) | |
| # Initialize model discovery | |
| model_discovery = ModelDiscovery(DEFAULT_HOST, OPENAI_API_KEY) | |
| # Load and apply saved API keys | |
| saved_keys = api_key_manager.load() | |
| if "brave" in saved_keys: | |
| update_search_config(api_key=saved_keys["brave"]) | |
| logger.info("Loaded Brave API key from saved configuration") | |
| return { | |
| "memory_manager": memory_manager, | |
| "memory_vector": memory_vector, | |
| "skills_manager": skills_manager, | |
| "session_manager": session_manager, | |
| "upload_handler": upload_handler, | |
| "personal_docs_manager": personal_docs_manager, | |
| "api_key_manager": api_key_manager, | |
| "preset_manager": preset_manager, | |
| "chat_processor": chat_processor, | |
| "research_handler": research_handler, | |
| "chat_handler": chat_handler, | |
| "model_discovery": model_discovery, | |
| "current_presets": preset_manager.presets, | |
| "PERSONAL_INDEX": personal_docs_manager.index | |
| } | |