"""ChromaDB vector memory for incident similarity (optional).""" from __future__ import annotations import os from typing import Any, Optional _client: Any = None def get_collection(): global _client if _client is not None: return _client try: import chromadb # type: ignore except ImportError: return None path = os.getenv("CHROMA_PERSIST_DIR", "./chroma_data") client = chromadb.PersistentClient(path=path) _client = client.get_or_create_collection("sentinel_incidents") return _client def remember_incident(text: str, metadata: dict[str, Any]) -> None: col = get_collection() if col is None: return import uuid col.add(ids=[str(uuid.uuid4())], documents=[text], metadatas=[metadata]) def similar_incidents(text: str, k: int = 3) -> list[dict[str, Any]]: col = get_collection() if col is None: return [] res = col.query(query_texts=[text], n_results=k) out: list[dict[str, Any]] = [] for md, dist in zip(res.get("metadatas", [[]])[0] or [], res.get("distances", [[]])[0] or []): out.append({"metadata": md, "distance": dist}) return out