Odysseus v1.0
This commit is contained in:
114
src/app_initializer.py
Normal file
114
src/app_initializer.py
Normal file
@@ -0,0 +1,114 @@
|
||||
# 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
|
||||
}
|
||||
Reference in New Issue
Block a user