Source code for flexeval.db_utils

"""Peewee database utilities."""

import peewee as pw

from flexeval.classes import base as classes_base
from flexeval.classes.dataset import Dataset
from flexeval.classes.eval_set_run import EvalSetRun
from flexeval.classes.message import Message
from flexeval.classes.metric import Metric
from flexeval.classes.thread import Thread
from flexeval.classes.tool_call import ToolCall
from flexeval.classes.turn import Turn

DATABASE_TABLES = [EvalSetRun, Dataset, Thread, Turn, Message, ToolCall, Metric]


[docs] def initialize_database(database_path: str, clear_tables: bool = False): classes_base.database.init(database_path) # classes_base.database.start() if clear_tables: classes_base.database.drop_tables(DATABASE_TABLES) classes_base.database.create_tables(DATABASE_TABLES)
[docs] def bind_to_database(database_path: str) -> pw.Database: """Utility function for binding to a FlexEval database so that ORM functionality can be used. See: https://docs.peewee-orm.com/en/latest/peewee/database.html#setting-the-database-at-run-time Returns: pw.Database: The new database created for the models to bind to. """ new_database = classes_base.create_sqlite_database(database_path) new_database.bind(DATABASE_TABLES) # Verify the binding worked by checking one of the models assert classes_base.BaseModel._meta.database == new_database return new_database