"""Map Supabase RPC rows to LangChain Document objects.""" from __future__ import annotations from typing import Any, Dict from langchain_core.documents import Document def row_to_document(row: Dict[str, Any]) -> Document: """Convert a match_documents_v2_full row into a LangChain Document. Hoists top-level RPC columns into metadata for clearer agent consumption. """ raw_meta = row.get("metadata") meta: Dict[str, Any] = dict(raw_meta) if isinstance(raw_meta, dict) else {} if row.get("id") is not None: meta.setdefault("id", row["id"]) for key in ("name", "slug"): if row.get(key) is not None: meta.setdefault(key, row[key]) sim = row.get("similarity") if sim is not None: try: meta["similarity"] = float(sim) except (TypeError, ValueError): meta["similarity"] = 0.0 content = row.get("content") or "" return Document(page_content=content, metadata=meta)