from __future__ import annotations import logging from typing import Optional from config.settings import AppSettings, get_settings from backend.storage import SQLiteRunStore, SQLitePersonaStore from backend.core.persona_seed import seed_defaults_overwrite from backend.core.persona_system import get_persona_system logger = logging.getLogger(__name__) run_store: Optional[SQLiteRunStore] = None persona_store: Optional[SQLitePersonaStore] = None def get_run_store() -> SQLiteRunStore: if run_store is None: raise RuntimeError("RunStore not initialized") return run_store def get_persona_store() -> SQLitePersonaStore: if persona_store is None: raise RuntimeError("PersonaStore not initialized") return persona_store async def seed_personas_and_settings(*, overwrite_defaults: bool = False) -> None: store = get_persona_store() if overwrite_defaults: await seed_defaults_overwrite(store=store) else: # Best-effort: seed only if missing would require extra checks; keep overwrite behavior explicit. await seed_defaults_overwrite(store=store) await refresh_persona_cache() async def refresh_persona_cache() -> None: store = get_persona_store() records = await store.list_persona_records(include_deleted=False) personas: list = [] for rec in records: personas.append( { "id": rec.persona_id, "kind": rec.kind, "name": rec.name, "is_default": rec.is_default, "version_id": rec.current_version_id, "attributes": rec.attributes, "question_bank_items": rec.question_bank_items, } ) get_persona_system().set_personas(personas) async def initialize_run_store(settings: Optional[AppSettings] = None) -> None: global run_store, persona_store resolved = settings or get_settings() db_path = resolved.db.path rs = SQLiteRunStore(db_path) await rs.init() run_store = rs ps = SQLitePersonaStore(db_path) await ps.init() persona_store = ps logger.info("RunStore + PersonaStore initialized")