Source code for llmp.data_model.events

"""
Event model for logging events.
===============================
# TODO: Generalize the model for all events.
currently referencing example_id and example_version
We want to achieve a more generalized logic for all events. How should we log new instructions, changing example versions, etc.?
We want also to assure a rollback mechanism for all events. How should we achieve this?

We need to log the following event data:
    - event_id: unique id for each event
    - timestamp: timestamp of the event
    - event_type: type of the event

Event specific data:
    - example_id: id of the example
    - example_version: version of the example
    - ref_event_id: reference to another event like the generation event
    - event_metrics: metrics of the event
    - job_setting: job settings of the event

    - extra: extra data for the event

"""

from typing import Union, Optional
from uuid import uuid4, UUID

from pydantic import BaseModel, Field

from llmp.types import EventType
from llmp.utils.helper import get_timestamp


[docs]class Event(BaseModel): event_id: str = Field(default_factory=lambda: uuid4().hex) timestamp: str = Field(default_factory=get_timestamp) event_type: EventType event_metrics: Union[dict, None] = None # --- job_setting: Union[dict, None] = None job_version: Union[int, None] = None example_id: Union[str, list[str], None] = None example_version: Union[int, None] = None extra: Union[dict, None] = None ref_event_id: Union[str, None] = None
[docs] @classmethod def from_sample_metric(cls, sample_metric: dict, job_setting: dict, example_id: Union[str, UUID] = None): return cls( event_type=EventType.SAMPLE_EVAL, example_id=example_id, event_metrics=sample_metric, job_setting=job_setting, )
[docs] @classmethod def from_evaluation_metric(cls, eval_metric: dict, job_setting: dict, example_ids: list[str] = None): return cls( event_type=EventType.EVAL_RUN, example_id=example_ids, event_metrics=eval_metric, job_setting=job_setting, )
[docs] @classmethod def from_generation_job(cls, event_metric: dict, job_setting: dict, example_id: Union[str, UUID] = None): return cls( event_type=EventType.GENERATION, example_id=example_id, event_metrics=event_metric, job_setting=job_setting, )