llm_compare / db.py
Kelvin-Xing
init
1ee4aa4
import sqlite3
import os
from datetime import datetime
from openpyxl import Workbook
DB_DIR = os.environ.get("DATA_DIR", ".")
DB_PATH = os.path.join(DB_DIR, "evaluations.db")
def _get_conn() -> sqlite3.Connection:
conn = sqlite3.connect(DB_PATH)
conn.execute("PRAGMA journal_mode=WAL")
return conn
def init_db() -> None:
conn = _get_conn()
conn.execute(
"""
CREATE TABLE IF NOT EXISTS evaluations (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp TEXT NOT NULL,
nickname TEXT NOT NULL,
prompt TEXT NOT NULL,
left_model_name TEXT NOT NULL,
left_model_endpoint TEXT NOT NULL,
left_response TEXT NOT NULL,
left_comment TEXT NOT NULL DEFAULT '',
left_grade INTEGER NOT NULL,
right_model_name TEXT NOT NULL,
right_provider TEXT NOT NULL,
right_response TEXT NOT NULL,
right_comment TEXT NOT NULL DEFAULT '',
right_grade INTEGER NOT NULL
)
"""
)
conn.commit()
conn.close()
def save_evaluation(
nickname: str,
prompt: str,
left_model_name: str,
left_model_endpoint: str,
left_response: str,
left_comment: str,
left_grade: int,
right_model_name: str,
right_provider: str,
right_response: str,
right_comment: str,
right_grade: int,
) -> None:
conn = _get_conn()
conn.execute(
"""
INSERT INTO evaluations (
timestamp, nickname, prompt,
left_model_name, left_model_endpoint, left_response, left_comment, left_grade,
right_model_name, right_provider, right_response, right_comment, right_grade
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
""",
(
datetime.utcnow().isoformat(),
nickname,
prompt,
left_model_name,
left_model_endpoint,
left_response,
left_comment,
left_grade,
right_model_name,
right_provider,
right_response,
right_comment,
right_grade,
),
)
conn.commit()
conn.close()
def export_to_excel(filepath: str) -> str:
conn = _get_conn()
cursor = conn.execute("SELECT * FROM evaluations ORDER BY id")
columns = [desc[0] for desc in cursor.description]
rows = cursor.fetchall()
conn.close()
wb = Workbook()
ws = wb.active
ws.title = "Evaluations"
ws.append(columns)
for row in rows:
ws.append(list(row))
wb.save(filepath)
return filepath