from __future__ import annotations import json from pathlib import Path from app.schemas.intent import IntentDefinition class IntentRegistry: def __init__(self, intents: list[IntentDefinition]) -> None: self._intents = {intent.intent_id: intent for intent in intents} @classmethod def from_json(cls, file_path: str) -> "IntentRegistry": data = json.loads(Path(file_path).read_text(encoding="utf-8")) intents = [IntentDefinition.model_validate(item) for item in data] return cls(intents) def get(self, intent_id: str) -> IntentDefinition: return self._intents[intent_id] def list(self) -> list[IntentDefinition]: return list(self._intents.values()) def match(self, text: str) -> IntentDefinition | None: for intent in self._intents.values(): if any(keyword in text for keyword in intent.keywords): return intent return None