from data_access import get_pg_sync_connection conn = get_pg_sync_connection() def create_eval_database(): """Create SQLite database with a proper relational structure.""" # Connect to the database (creates it if it doesn't exist) cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS question_groups ( id SERIAL PRIMARY KEY, group_name TEXT NOT NULL, description TEXT ); ''') # Create questions table cursor.execute(''' CREATE TABLE IF NOT EXISTS questions ( id SERIAL PRIMARY KEY, question_text TEXT NOT NULL, question_group_id INTEGER, CONSTRAINT unique_question_text UNIQUE (question_text), FOREIGN KEY (question_group_id) REFERENCES question_groups (id); ''') cursor.execute(''' CREATE TABLE IF NOT EXISTS source_finders ( id SERIAL PRIMARY KEY, source_finder_type TEXT NOT NULL, description TEXT, source_finder_version TEXT NOT NULL ); ''') cursor.execute(''' CREATE TABLE IF NOT EXISTS source_finder_runs ( id SERIAL PRIMARY KEY, run_id INTEGER NOT NULL, source_finder_id INTEGER NOT NULL, description TEXT, FOREIGN KEY (source_finder_id) REFERENCES source_finders(id), CONSTRAINT unique_source_per_run_id UNIQUE(run_id, source_finder_id) ); ''') cursor.execute(''' CREATE TABLE IF NOT EXISTS source_finder_run_question_metadata ( id SERIAL PRIMARY KEY, question_id INTEGER NOT NULL, source_finder_run_id INTEGER NOT NULL, metadata JSON, FOREIGN KEY (source_finder_run_id) REFERENCES source_finder_runs(id),d4pnrdvjqlt9gg FOREIGN KEY (question_id) REFERENCES questions(id), CONSTRAINT unique_question_per_run_id UNIQUE(question_id, source_finder_run_id) ); ''') # Create table for logging all sources from each run cursor.execute(''' CREATE TABLE IF NOT EXISTS source_run_results ( id SERIAL PRIMARY KEY, source_finder_run_id INTEGER NOT NULL, run_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, question_id INTEGER NOT NULL, tractate TEXT NOT NULL, folio TEXT NOT NULL, sugya_id TEXT NOT NULL, rank INTEGER NOT NULL, reason TEXT, FOREIGN KEY (source_finder_run_id) REFERENCES source_finder_runs(id), FOREIGN KEY (question_id) REFERENCES questions(id), CONSTRAINT constraint source_run_results_pk UNIQUE(source_finder_run_id, question_id, sugya_id) ); ''') conn.commit() conn.close() def load_source_finders(): cursor = conn.cursor() for item in ["claude_sources", "keywords", "lenses"]: cursor.execute("INSERT INTO source_finders (source_finder_type, source_finder_version) VALUES (%s, 1)", (item,)) conn.commit() if __name__ == '__main__': # Create the database create_eval_database()