"""Sidebar schema explorer: per-table chunk cards rendered from the index.""" from __future__ import annotations import streamlit as st from i18n import t @st.cache_data(show_spinner=False) def fetch_schema_chunks(_index_id: int, db_id: str) -> list[tuple[str, str]]: schema_index = st.session_state.get("_schema_index") if schema_index is None: return [] records = schema_index.schema_collection.get( where={"db_id": db_id}, include=["documents", "metadatas"], ) docs = records.get("documents") or [] metas = records.get("metadatas") or [] pairs: list[tuple[str, str]] = [] for doc, meta in zip(docs, metas, strict=False): table_name = str((meta or {}).get("table_name") or "") if table_name: pairs.append((table_name, str(doc))) pairs.sort(key=lambda p: p[0].lower()) return pairs def render_schema_explorer(db_id: str) -> None: schema_index = st.session_state.get("_schema_index") if schema_index is None: return chunks = fetch_schema_chunks(id(schema_index), db_id) if not chunks: st.caption(t("schema_explorer_empty")) return with st.expander(t("schema_explorer_collapsed", n=len(chunks)), expanded=False): st.caption(t("schema_explorer_caption")) for table_name, text in chunks: with st.expander(table_name, expanded=False): st.code(text, language="text")