"""Introspect the demo DB schema -> prompt text + table allowlist.""" from __future__ import annotations def get_schema(con) -> dict[str, list[str]]: """Return {table_name: [column, ...]} for the main schema.""" tables = [ r[0] for r in con.execute( "SELECT table_name FROM information_schema.tables " "WHERE table_schema = 'main' ORDER BY table_name" ).fetchall() ] schema: dict[str, list[str]] = {} for t in tables: cols = con.execute( "SELECT column_name FROM information_schema.columns " "WHERE table_name = ? ORDER BY ordinal_position", [t], ).fetchall() schema[t] = [c[0] for c in cols] return schema def allowed_tables(con) -> set[str]: return set(get_schema(con).keys()) def schema_prompt(con) -> str: """Compact schema rendering for the LLM prompt: ``table(col1, col2, ...)``.""" return "\n".join(f"{t}({', '.join(cols)})" for t, cols in get_schema(con).items())