eval_results / scripts /eval_tables.py
davidr70's picture
for now limit the view of questions to the first group id until we fix the ui to support multiple question groups
92c49ff
raw
history blame
3.08 kB
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()