File size: 4,528 Bytes
cd7e7a5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | # 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
}
|