AI_Personas / src /context /database.py
Claude
Implement Phase 1: Persona-based LLM query system for urban planning
514b626 unverified
"""Context database and management system"""
import json
from pathlib import Path
from typing import Dict, List, Optional
from .models import EnvironmentalContext
class ContextDatabase:
"""Database for managing environmental contexts"""
def __init__(self, contexts_dir: Optional[Path] = None):
"""
Initialize context database
Args:
contexts_dir: Directory containing context JSON files.
Defaults to data/contexts relative to project root.
"""
if contexts_dir is None:
# Default to data/contexts from project root
project_root = Path(__file__).parent.parent.parent
contexts_dir = project_root / "data" / "contexts"
self.contexts_dir = Path(contexts_dir)
self.contexts: Dict[str, EnvironmentalContext] = {}
self._load_contexts()
def _load_contexts(self) -> None:
"""Load all context JSON files from the contexts directory"""
if not self.contexts_dir.exists():
print(f"Warning: Contexts directory not found: {self.contexts_dir}")
print("Creating empty contexts directory...")
self.contexts_dir.mkdir(parents=True, exist_ok=True)
return
json_files = list(self.contexts_dir.glob("*.json"))
if not json_files:
print(f"Warning: No context JSON files found in {self.contexts_dir}")
return
for json_file in json_files:
try:
with open(json_file, "r", encoding="utf-8") as f:
data = json.load(f)
context = EnvironmentalContext(**data)
self.contexts[context.context_id] = context
except Exception as e:
print(f"Warning: Failed to load {json_file}: {e}")
print(f"Loaded {len(self.contexts)} environmental contexts")
def get_context(self, context_id: str) -> Optional[EnvironmentalContext]:
"""
Retrieve a context by ID
Args:
context_id: Unique context identifier
Returns:
EnvironmentalContext object if found, None otherwise
"""
return self.contexts.get(context_id)
def get_all_contexts(self) -> List[EnvironmentalContext]:
"""
Get all loaded contexts
Returns:
List of all EnvironmentalContext objects
"""
return list(self.contexts.values())
def list_context_ids(self) -> List[str]:
"""
Get list of all context IDs
Returns:
List of context ID strings
"""
return list(self.contexts.keys())
def get_default_context(self) -> Optional[EnvironmentalContext]:
"""
Get a default context (first available)
Returns:
First EnvironmentalContext or None if none exist
"""
if self.contexts:
return list(self.contexts.values())[0]
return None
def load_context_from_file(filepath: Path) -> EnvironmentalContext:
"""
Load a single context from a JSON file
Args:
filepath: Path to JSON file
Returns:
EnvironmentalContext object
"""
with open(filepath, "r", encoding="utf-8") as f:
data = json.load(f)
return EnvironmentalContext(**data)